领域设计建模关心领域模型对象的职责分配,生命周期管理,与外部环境之间的协作机制。
领域对象模型的四个问题与战术设计元模型:
领域模型对象如何实现数据的持久化?
资源库模式隔离了领域逻辑与数据库实现,并将领域模型对象当作生命周期管理的资源,将持久化领域对象的介质抽象为资源库。
领域模型对象的加载以及对象间的关系该如何处理?
领域驱动设计引入聚合划分领域模型对象的边界,并在边界内管理所有领域模型对象之间的关系,使其在对象的协作与完整性之间取得平衡。
领域模型对象在身份上是否存在明确的差别?
领域驱动设计使用实体与值对象区分领域模型对象的身份,避免了不必要的身份跟踪与额外的并发控制要求。
领域模型对象彼此之间如何能弱依赖地完成状态的变更通知?
领域驱动设计引入了领域事件,通过发布与订阅领域事件接触聚合与聚合之间的依赖,体现状态变迁的特性。
模型元素的哲学依据
实体:实体范畴,是谓语描述的主题。它包含了其他范畴,包括引起属性变化和状态迁移的动作;
值对象:为主体对象的属性,通常代表分量,性质,关系,场所,时间或位置/姿态;
领域事件:封装了主体的状态,代表了因为动作导致的状态变迁产生的被动遭遇,即过去发生的事实。
领域服务:其他范畴必须内居于一主体,若动作代表的业务行为无法找到一个主体对象来内居,就以领域服务作为特殊主体封装。
实体
能够以主体类型的形式表达领域逻辑中具有个性特征的概念,而这个主体的状态在相当长一段时间内会持续地变化,因此需要一个身份标识来标记。
实体3个要素
身份标识
属性
领域行为
值对象
在进行领域设计建模时,可优先考虑使用值对象而非实体对象建模。值对象没有唯一标识,设计为不变的,不用考虑并发访问带来的问题,因此比实体对象更容易维护,更容易测试,更容易优化。
与实体的本质区别
业务的参与者对它的相等判断是依据值还是依据身份标识。