在软件中,专门用于解决领域问题的那部分通常只占整个软件系统的很小一部分,这与其重要性远远不成比例。要想实现最佳的设计构思,旧的去研究模型中的元素并且将他满是为一个系统。绝对不能像在夜空中辨认星座一样,勉强把领域对象从许多对象中挑选出来。我们需要将领域对象与系统中的其他功能分离。这样就能够避免将领域概念和其他至于软件技术相关的概念想混淆。也不会把领域与整个软件系统混为一谈。
分离领域的复杂技术早已出现,而且都是我们耳熟能详的,但是他对于能否成功用建模原则起着非常关键的作用,所以我们要从领域驱动的视角对他进行简要的回顾。
模式:Layered Architecure
在一个运输应用程序中,要想支持从城市列表中选择运送货物目的地这样的简单用户行为,程序代码必须包括:
- 在屏幕上绘制一个屏幕组件(widget);
- 查询数据库,调出所有可能的城市;
- 解析并验证用户输入;
- 将所选择城市与货物关联;
- 向数据库提交此次数据修改。
上面所有的代码都在同一个程序中,但是只有一小部分代码与运输业务相关。
在上面的对象程序中,常常会在业务对象那中直接写入用户界面、数据库访问等支持代码。而一些额外的业务逻辑则会被嵌入到用户界面组件和数据库脚本的行为中。这么做是为了以最简单的方式在短期内完成开发工作。
如果与领域有关的代码分散在大量的其他代码之中,那么查看和分析领域代码就会变得相当困难。对用户假面的简单修改实际上很可能会改变业务逻辑,而要想调整业务规则也可能需要对用户界面代码、数据库操作代码或者其他的程序元素进行仔细的筛查。这样就不太可能实现一致的、模型驱动的对象了,同时也会改自动化测试带来困难。程序中每一个活动都有其自身的逻辑和适用的技术,因此程序本身必须简单明了,否则就会让人无法理解。
分割软件系统有各种各样的方式,但是根据软件行业的经验和惯例,普遍采用Layered Architecture(分层架构)特别是有几个层基本上已经成了标准层。
用户界面层(表示层) |
负责现用户显示信息和解释用户指令。这里指的用户可以是另一个计算机系统,不一定是使用用户界面的人
|
应用层 |
定义软件要完成的任务,并且只会表达领域概念的对象来解决问题。这一层所负责的工作对业务来说意义重大,也是与其他系统的应用层进行交互的必要渠道
应用层要尽量简单,不包含业务规则或者知识,而知未下一层中的领域对象协调任务,分配工作,是他们互相协作。他没有反应业务情况的状态,但是却可以具有另外一种状态,为用户或程序显示某个任务的进度。
|
领域层(或模型层) |
负责表达业务概念,业务状态信息以及业务规则。尽管保存业务状态的技术细节是基础设施层实现的,但是反应业务情况的状态是由本层控制并且使用的。领域层是业务软件的核心。
|
基础设施层 |
为上面各层提供通用的技术能力:为应用层传递消息,为领域层提供持久化机制,为用户界面层绘制屏幕组件,等等。基础设施层还能够通过架构框架来支持四个层次间的交互模式。
|
有些项目没有明显划分出用户界面层和应用层,而有些项目则有多个基础设施层。但是将领域层分离出来才是实现Model-Driven Design的关键。
因此:
给复杂的应用程序划分层次。在每一层内分别进行设计,使其具有内聚性并且只依赖于它的下层。采用标准的架构模式,至于上层进行松散的连接。将所有与领域模型相关的代码放在一个层中,并把它与用户界面层、应用层以及基础设施层的代码分开。领域对象应该将重点放在如何表达领域模型上,而不需要考虑自己的显示和存储问题,也无需管理应用任务等内容。这使得模型的含义足够丰富,结构足够清晰,可以捕捉到基本的业务知识,并有效地使用这些知识。
- 大小: 21.4 KB
分享到:
相关推荐
纳米光催化材料在膜分离领域中的研究进展_伍栖梦.caj
'盲源分离 Jade' 和 '盲源分离jade' 强调了JADE在盲源分离领域的重要性。 描述"历次进行修改过的JADE算法,可以看出盲源分离算法的演变过程,并通过对各算法的研究看出思路"说明这个压缩包包含了JADE算法的多个版本...
Transformer在自然语言处理领域取得了巨大成功,近年来也被引入到音频处理中,特别是语音分离领域。SepFormer利用Transformer的自注意力机制来捕捉音频序列中的长期依赖性,这对于分离复杂环境下的多声源非常有效。 ...
现有的模型可以扩展到其他分离领域,如声音源分离,同时,可以探索跨领域迁移学习的可能性,以进一步提升分离效果。 综上所述,基于机器学习的单声道唱声分离技术在理论与实践上都在不断发展,结合深度学习和创新的...
ICA(Independent Component Analysis)是盲信号分离领域的一种主流方法,它旨在寻找一种线性变换,将观测到的混合信号分解为多个非高斯分布的独立成分。ICA的核心思想是假设原始信号是相互独立的,而混合信号则是...
该类材料在气体吸附与分离领域展现出优于传统多孔材料的特性,尤其在环保和能源领域具有广泛的应用前景。刘大欢、黄宏亮等人在他们的研究中,专注于稳定锆金属-有机骨架材料的合成,以及这些材料在CO2/N2分离性能上...
总之,ICA在盲信号分离领域具有不可替代的作用,掌握其原理和实现方法对于从事相关领域的研究人员和技术人员而言至关重要。随着技术的不断进步,ICA的应用范围还将继续扩大,其在复杂信号处理中的潜力值得我们持续...
聚酰亚胺基气体分离膜是应用于气体分离领域的一种重要材料,其改性方法和最新进展是一个研究热点。聚酰亚胺具有稳定的化学结构、优良的机械性能和高自由体积分布,这使得它们在分离气体混合物时,能够在保持高渗透...
**FastICA语音分离详解** FastICA(Fast Independent Component Analysis)是一种高效的独立成分分析方法,它在信号...在实际应用中,结合适当的评价方法,我们可以不断优化FastICA算法,提升其在语音分离领域的性能。
这个文件“ICA盲源分离_ica 分离_ica盲分离_盲源分离ICA”显然集中于ICA在盲源分离领域的应用。 描述中提到的“一种新的盲源分离方法”,暗示了文件可能包含对传统ICA算法的改进或创新。它特别提到了“Injecting ...
固液两相分离及过滤技术是工业中广泛应用的技术,用于分离液体和固体颗粒混合物,以获得清洁的液体和固体产品。固液分离技术主要通过物理方法实现,...全书内容全面、系统,资料新颖,是固液分离领域内的一部重要著作。
标题中的"PAST_disp_signal.rar"是一个压缩包文件,其中包含了关于“PAST”(非线性主分量分析)在盲信号分离领域的应用。盲信号分离(Blind Signal Separation, BSS)是一种处理混合信号的技术,其目标是将未知源...
本压缩包包含的"paper"文件可能包括一系列关于RNN在语音分离领域的研究论文,涵盖了理论分析、模型构建、实验结果和未来方向等。通过阅读这些论文,读者可以了解到当前的研究进展,理解RNN如何通过创新的架构和训练...
泡沫分离技术以其独特的优点,在蛋白质分离领域表现出色。首先,设备的简便性使得它在处理低浓度产品时显示出明显优势。此外,该技术的分离分辨率高,能有效地将表面活性差异较大的物质分开,从而获得高纯度的富集液...
总的来说,Sobi算法是盲源分离领域的一个重要工具,尤其适用于那些依赖二阶统计信息的场景。然而,实际应用中,可能需要结合其他技术,如预处理、后处理或者与其他BSS方法结合,以提高分离的准确性和稳定性。
在盲源分离领域,ICA的目标是当一组信号被未知线性混合后,通过观察到的混合信号来恢复原始信号,而无需事先知道混合的过程。JADE算法通过最大化非高斯性度量(如负熵或Kurtosis)来寻找分离的滤波器,这些滤波器...