课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的企业和程序员都在学习领域驱动设计的相关技术,下面我们就通过案例分析来了解一下,领域服务类型与应用方法。
领域服务还有一个很重要的功能就是可以避免领域逻辑泄露到应用层。因为如果没有领域服务,那么应用层会直接调用领域对象完成本该是属于领域服务该做的操作,这样一来,领域层可能会把一部分领域知识泄露到应用层。因为应用层需要了解每个领域对象的业务功能,具有哪些信息,以及它可能会与哪些其他领域对象交互,怎么交互等一系列领域知识。因此,引入领域服务可以有效的防止领域层的逻辑泄露到应用层。对于应用层来说,从可理解的角度来讲,通过调用领域服务提供的简单易懂但意义明确的接口肯定也要比直接操纵领域对象容易的多。
说到领域服务,还需要提一下软件中一般有三种服务:应用层服务、领域服务、基础服务。
比如应用层有一个资金转帐的服务,该服务主要做以下事情:
1)获取输入(如一个XML请求);
2)发送消息给领域层服务,要求其实现转帐的业务逻辑;
3)领域层服务处理成功,则调用基础层服务发送Email通知。
领域层的服务做以下事情:
1)获取源帐号和目标帐号,分别通知源帐号和目标帐号进行扣除金额和增加金额的操作;
2)提供返回结果给应用层。
基础层服务做以下事情:
1)按照应用层的请求,发送Email通知;
所以,从上面的例子中可以清晰的看出,每种服务的职责。
聚合及聚合根(Aggregate,AggregateRoot):
聚合,它通过定义对象之间清晰的所属关系和边界来实现领域模型的内聚,并避免了错综复杂的难以维护的对象关系网的形成。聚合定义了一组具有内聚关系的相关对象的集合,我们把聚合看作是一个修改数据的单元。
聚合有以下一些特点:
1.每个聚合有一个根和一个边界,边界定义了一个聚合内部有哪些实体或值对象,根是聚合内的某个实体;
2.聚合内部的对象之间可以相互引用,但是聚合外部如果要访问聚合内部的对象时,必须通过聚合根开始导航,绝对不能绕过聚合根直接访问聚合内的对象,也就是说聚合根是外部可以保持对它的引用的元素;
3.聚合内除根以外的其他实体的标识都是本地标识,也就是只要在聚合内部保持即可,因为它们总是从属于这个聚合的;
4.聚合根负责与外部其他对象打交道并维护自己内部的业务规则;
5.基于聚合的以上概念,我们可以推论出从数据库查询时的单元也是以聚合为一个单元,也就是说我们不能直接查询聚合内部的某个非根的对象;
6.聚合内部的对象可以保持对其他聚合根的引用;
7.删除一个聚合根时必须同时删除该聚合内的所有相关对象,因为他们都同属于一个聚合,是一个完整的概念。
关于如何识别聚合以及聚合根的问题:
我觉得我们可以先从业务的角度深入思考,然后慢慢分析出有哪些对象是:
1)有独立存在的意义,即它是不依赖于其他对象的存在它才有意义的;
2)可以被独立访问的,还是必须通过某个其他对象导航得到的。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。