领域驱动设计读书笔记-第二部分(二)



 

 

         第二部分第二篇关于第二部分剩余部分,包括Module,Aggregate,Factory,Repository.

         Module作为一种粗粒度的建模和设计元素,在Module内部应该是高内聚的,Module之间应该是低耦合的。系统的领域模型通常可以分为几个Module,比如电子商务的领域就可以大致分为商品,订单,促销,支付,库存等Module

         Aggregate通过定义清晰的所属关系和边界,并避免混乱,错综复杂的对象关系网来实现模型的内聚。Aggregate就是一组相关对象的集合,作为数据修改的单元。每一个Aggregate具有一个Aggregate rootboundaryAggregate root作为一个特定的Entityroot是唯一允许外界对象保持对它的引用的元素。boundary内部的对象和互相引用。在Aggregate内部除root以外的entity都具有本地标识,本地标识只在内部加以区分。因为外部对象看不到除root以为的对象。root可以将Aggregate内部的对象引用传递给其他对象,其他对象只能暂时的引用。对于boundary内部的Value Object,根可以创建一个副本传递给外界对象,就可以不管了。Aggregate内部只有root能通过数据库直接访问,其他对象只能通过遍历方式得到。

Factory在领域模型中,作为装配EntityValue Object的对象存在,它承担创建这些对象和聚合的职责,创建Aggregate时作为一个整体,并满足这个Aggregate的固定规则。在使用Factory模式时有几种选择,对于复杂对象的装配可以在合适的位置创建Factory Method,某个Aggregateroot上或者一个Aggregate与另一个Aggregate的交界处如下图所示。



 



 

在找不到合适的位置放置factory method时,就需要单独创建一个Factory类。对于一些简单不涉及到其他对象的创建和多态性的使用构造函数无疑要简化许多。在设计到Aggregate的创建时,就不能使用构造函数。

大部分对象都不能通过全局查询来访问,不受限制的数据库查询实际上会破坏领域对象和Aggregate的封装。通过将实际的存储和查询封装至Repository对象中,隐藏实现细节。只为需要直接访问Aggregate rootEntity提供Repository,让客户始终聚焦于模型。

Repository的优点:

<!--[if !supportLists]-->1.       <!--[endif]-->应用程序和领域设计与持久化技术解耦;

实现一个Repository的基本特性如下图所示:



 

RepositoryFactory的关系:

         Factory是将创建一个复杂对象的复杂过程封装起来,用于创建新对象。而Repository是在内存中或者数据库中查找已有对象(可以使用ORMQuery Object等模式)

猜你喜欢

转载自jjiag22222.iteye.com/blog/2025146