`
阅读更多

文字写完以后,突然想起来很久以前在JavaEye上看的关于贫血模型、富血模型、充血模型的讨论。最后的结论大概与持久化无关的业务逻辑应该放在模型中实现,而与持久化有关的逻辑要放到Service中实现。看这几多文字,其实也就是说这么个意思,不过多说一些。闲话休提,正文开始。



在大结构上系统描述为上面的图形。关键元素是领域模型领域服务基础服务。能够精准的反应业务的模型,和围绕模型的有效的服务,是软件团队在某一行业领域生产成果价值的两个很重要的体现。领域服务作为系统的核心逻辑之一,一方面,承担着完成所有与技术环境相关的业务逻辑的实现,另外一方面,作为领域模型和技术环境的缓冲,保证了领域模型的普适、独立

 

作为独立的价值体现,建模的结果需要有相当高的普适性。概念模型因为和实现无关所以具有先天的普适性,但到了实现层次,保证模型的独立性就成了一个需要专门考虑的问题。通常的做法是对于一个业务逻辑,判断它是否与环境相关,如果不是,那么放在模型中实现,如果是,则放在领域服务中实现。这样保证领域模型的普适性,得到了可移植的最大价值。领域服务作为领域模型和基础服务之间的一个缓冲层次,隔离领域模型和环境以及上下文。丢失领域模型的普适性可能是技术架构的问题导致的,也可能是建模过程的问题导致的。


在技术架构方面,一方面,我们要使模型尽可能的普适,那么就要求模型尽可能的少依赖环境。严格说来,模型应该完全不依赖与环境。例如我们将行为主体建模成为一个User模型,他有名称,有密码,但很明显这一切与环境无关。不论你的技术架构是开源的技术栈,或者是公司自己的技术积累,这个模型应该是都是成立的。在主流的以开源技术栈上实现的应用中,一般都会有DAO(Data Access Object),Service等对象在POJO类周围,完成领域服务,同时让POJO模型仅从事与环境无关的业务实现。由此看来,所谓不依赖,和非侵入性有很大关系。在Hibernate中,以XML来描述映射关系元数据,保证了模型不被侵入(Hibernate3.2以后加入了在Class上面用Annotation配置映射源数据的方式,但因为Annotation本身是程序元数据而不是程序的常规内容,不影响业务逻辑实现,所以也可以看做是没有侵入)。由此也可以看出另外一个方面,系统的技术架构为了能够实现尽可能多的“通用服务”,需要在模型上加入许多的限制,这种限制在Hibernate中体现为:POJO要符合JPA规范的要求,同时,严格一点,应该符合JavaBeans规范。但是我们也看到,模型遵循这些规范并没有给自己带来侵入和对环境的依赖。所以我认为,实现通用服务所要求的对模型的限制,完全可以仅仅是规范的形式,而不是直接到实现层次。

在建模方面,准确的分辨一个业务逻辑单元是否依赖环境,将那些与环境无关的业务逻辑放在模型实现中,而将那些与环境紧密相连的业务逻辑放在服务中。原因也可以从两个方面来说明,一个方面是许多业务的实现过程,本身就是领域对象所应该包含逻辑的表达。例如给一个用户组增加用户,我们会建模成为Group.add(User)。与服务无关。是为职责所定,不能乱放。另外一个方面,如前所述,领域模型与环境无关,而领域服务则依赖于环境,于是领域模型可以普适,轻易的移植,而领域服务则不然,这也将使我们实现业务逻辑的时候,应该默认的选择领域对象,用业务逻辑的实现来使领域模型更加富有内涵,将使我们在不同的系统中达到最大限度的重用,包括代码重用和业务逻辑重用。所以,良好的区分模型和服务的职责和边界,是业务系统设计要解决的最重要的问题之一。

另外一个需要说明白的问题是依赖方向。Java企业及应用开发发展这么多年,追求系统各部分之间的松耦合这个方向一直没有变。松耦合带来的好处无需赘言。对于具体的实现方式,或者说软件设计、实现中应该考虑、注意的问题,有很多的开源框架做了深入的探讨。通用的模式是表现、领域服务、模型、基础服务各个部分按照纵向排列,任意二者之间最多只能有一个方向的依赖,而且不相邻层次之间不允许发生直接依赖关系。表现层依赖于模型和领域服务,领域服务依赖于模型和基础服务,模型不对外界环境发生依赖,基础服务也不可能对其上面的层次发生依赖。系统模块确定的对外接口和单向依赖使得各部分之间的耦合程度降到最低,一个部分内部的变化不会影响到其他部分,对外接口的调整也仅影响到系统架构上更高的层次,由此提高系统的可扩展性、可维护性。从技术角度上讲,一些细节的实现需要模型的实现者依赖环境。例如在实现延迟加载这个细节的时候,模型中必须存在对能够获取到数据的对象的引用,于是就造成了对环境的依赖。但是,这个情况的发生,应该在模型类的可见级别控制范围内,或者从规范以及建议层面禁止直接调用。

分享到:
评论

相关推荐

    论文研究-混合加噪声模型与条件独立性检测的因果方向推断算法.pdf

    为此,提出一种采取分治策略的混合加噪声模型与条件独立性检测的因果方向推断方法。首先将一个<i>n维因果网络分解成<i>n个诱导子网络,分别归入三种基本结构(单度结构、非三角结构和存在三角的结构)中的一种,从...

    突水水源的独立性权–模糊可变理论识别模型

    结果表明:独立性权系数–模糊可变理论模型排除了水样中各指标间冗余信息的影响,克服了水样各变量间权重难以确定以及变量对水质影响不均匀的问题,可在一定程度上保证突水水源识别模型的准确度;Cl–权重值远大于...

    指数随机图模型完整代码

    对于整体网络的观察有助于我们认识社会力量是如何塑造真实世界系统的,建立以关系为中心面向整体网络分析的形成。复杂的以关系为中心的整体网络...(2) 二元独立性模型 (3) 二元依赖性模型 (4) 高序依赖性模型

    模糊系统知识模型的一致性与完备化

    及其度量方法引入到知识模型中,独立地提出了知识模型的扩充、极大一致性分解的概念与方法,并结 合粗集理论中的约简理论,形成了知识模型完备化处理的理论与方法.知识模型的一致性与完备化理论 与方法可以应用于...

    审计独立性对盈余管理影响经验研究

    审计独立性对盈余管理影响经验研究,唐祖薇,,上市公司盈余管理现象是我国资本市场亟待解决的问题之一。本文以2007年和2008年深沪市上市公司为样本,采用截面修正的Jones模型衡量�

    基于FlightGear2.6.0版本的YASim模型独立化

    7.使用Flightgear地面模型替换了YASim的地面模型,以保证准确性; 8.保留了flight统一状态量输入输出接口; 9.移除了flight统一的初始化函数。 另外,我还上传了一个工程,用于创建简单的模型接口,并将输入输出改造...

    模型网络度分布关于时间独立性的模拟和分析 (2010年)

    这为实证研究工作提出一个新观点, 即需要从不同时间点的角度来分析现实网络的一些普适性的特征, 同时也为理论研究网络模型度分布的时间独立性条件和成为无标度网络的条件提供了计算机模拟上的支持.

    EDM的模型无关性确定以及反磁性原子的作用

    我们执行独立于模型的分析,从最近与原子和分子的测量中提取电子和P,T奇数标量-伪标量(S-PS)核子-电子耦合的电偶极矩的极限。 仅通过使用最新的HfF +离子测量,就大大改善了使用顺磁系统的分析,但是由于这两个...

    基于变分Retinex模型的雾天图像增强方法

    基于变分Retinex模型将雾天图像分解为对应的光照子图和反射子图,并在各子图中进行独立的模型参数估计,有效提高了参数估计的准确性;以一种基于图像块的模型参数估计策略取代传统的逐点估计方法,补偿了由模型复杂度...

    钢铁企业APS优化引擎的软件模型研究及应用

    分析了钢铁企业APS 理论和应用...模型以通用性、独立性、可重用性和可扩展性为目标,分为接口层、求解层、模型层和算法层,阐述了各层的分工和协作方式。最后以钢轧一体化批量计划编制问题为例,说明了模型的应用方法。

    远程Ising模型中的共形不变性

    我们在临界点考虑远程伊辛模型的共形不变性问题。 连续描述是根据非局部场理论给出的,并且应力张量的缺失使所有将尺度不变性增强为共... d维短程伊辛模型中的共形不变性的详细综述也包括在内,并且可能具有独立意义。

    软件可靠性模型 软件测试

    软件可靠性模型的基本假设: ①软件的运行剖面与可靠性测试剖面一致。 ②一旦发现错误,立即修正,并不引入新的错误。 ③错误被查处和失效是独立的。 ④每个错误被发现的概率相等。

    论文研究-一种基于“独立性差”的分类学习新算法.pdf

    论文研究-一种基于“独立性差”的分类学习新算法.pdf, 从"独立性差"角度出发,提出了ISE准则下的"独立性差"估计新方法(difference of independence estimation, DOIE).从...

    递归模型神经网络

    与卷积神经网络一样,该模型具有一定程度的内部平移不变性,但其执行的计算量可以独立于输入图像大小进行控制。该模型是不可微分的,可以使用强化学习方法对其进行训练,以学习特定于任务的策略。我们在几个图像分类...

    论文研究-朴素贝叶斯分类器的独立性假设研究.pdf

    扩展了Rough集正区域和边界的...此外,在认知正区域的定义下,由于决策表的不相容性,在变精度模型下实现属性约简的增量处理是相当困难的,结合提出的高效算法,解决了这一问题。最后,仿真实验说明了算法的有效性。

    基于独立阴影的卫星移动通信信道模型及仿真

    信道模型是卫星移动通信系统设计和线路设计的基础. 主要研究了陆地卫星移动通信独立阴影衰落 信道模型,2 个相互独立的对数正态随机过程分别作用于直射... 累积分布仿真结果与理论分析计算结果的比较证明了模型的有效性.

    基于Matlab 的独立瑞利衰落模型的仿真

    :本文提出的一种基于正弦和的仿真瑞利衰减信道 的仿真模型,并用Matlab对该...经理论计算与仿真表明:在正弦波数量较少的情况下该模型的统计量与理论值非常接近,而且能被直接用来产生频率选择性多径不相关衰弱波形。

    matlab独立性检验代码-pcit:cit

    matlab独立性检验代码预测性条件独立测试(PCIT) 在图形模型结构学习中的应用 目前正在审查中! 看 描述 该程序包实现了多元条件独立性测试和基于PCIT的从数据中学习有向图的算法 开发者 :指定联系点 如果您想贡献...

    论文研究 - 白噪声分析:时间序列模型适当性的一种度量

    这项研究的目的是将白噪声过程应用于旨在确定独立性假设的模型充分性中。 这确保了在考虑中的任何时间序列中都不存在自相关,并且所输入的自回归综合移动平均(ARIMA)模型能够捕获此类序列中的线性结构。 该研究...

Global site tag (gtag.js) - Google Analytics