美文网首页
领域模型:聚合、聚合根

领域模型:聚合、聚合根

作者: 杰森斯坦sen | 来源:发表于2018-05-09 09:54 被阅读0次

聚合

聚合Aggregate就是一组相关对象的集合,我们把它作为数据修改和访问的单元。一个聚合包含聚合根、实体和值对象。

每个聚合都会有一个聚合根和聚合的边界Boundary,边界定义了在一个聚合里面内部应该有哪些实体,哪些子实体对象。定义边界的原因是我们期望对一个聚合的访问是通过聚合根点进行的,聚合里面的子实体对外界是完全封闭的。对于外部对象不应该去访问到一个聚合边界里面的子实体。

按实际对象分析思路,在领域模型中的领域对象分析应该按照从顶向下的思路进行展开,如果这样的话首先识别到的就是聚合根对象,然后再考虑对聚合根对象进行展开,在聚合根对象的展开过程中进一步细化子实体之间的关联和依赖关系。

实体、聚合根和值对象

实体有ID标识,有生命周期,有状态(用值对象来描述状态),实体通过ID进行区分。

聚合根是实体,聚合根的ID全局唯一标识。聚合根下面的实体的ID在聚合根内唯一即可。
聚合根相当于主Entity,子实体都不可能孤立存在,它们必须依附于一个聚合根存在。

值对象的核心本质是值,与是否有复杂类型无关,值对象没有生命周期,通过两个值对象的值是否相同区分是否是同一个值对象,值对象主要用于描述实体的状态。

  • 实体

具有唯一标识
持久化
具有生命周期
通过ID判断相等性
可变

  • 值对象

无唯一标识
用完就丢,主要起描述性作用
通过属性判断相等性,实现Equals方法
不可变

聚合设计的原则

  • 聚合是用来封装真正的不变性,而不是简单的将对象组合在一起
  • 聚合应尽量设计的小,主要因为业务决定聚合,业务改变聚合,尽可能小的拆分,可以避免重构,重新拆分
  • 聚合之间的关联通过ID,而不是对象引用
  • 聚合内强一致性,聚合之间最终一致性(高内聚低耦合)。边界就是界限上下文。

链接

领域模型:聚合、聚合根详解
领域模型核心概念:实体、值对象和聚合根
领域驱动设计: 构建你的代码蓝图
Domain-driven Design - Overview and building blocks

相关文章

  • 领域模型:聚合、聚合根

    聚合 聚合Aggregate就是一组相关对象的集合,我们把它作为数据修改和访问的单元。一个聚合包含聚合根、实体和值...

  • Golang领域模型-聚合根

    前言:聚合是要把实体、值对象等聚合起来完成完整的业务逻辑的一个存在。聚合根据上下文边界与业务单一职责、高内聚等原则...

  • DDD 领域驱动设计学习(六)- 聚合和资源库

    聚合的定义 聚合(以及聚合根):聚合表示一组领域对象(包括实体和值对象),用来表述一个完整的领域概念。而每个聚合都...

  • 微服务架构设计模式(五)业务逻辑设计

    微服务架构中的业务逻辑设计 1、使用聚合设计领域模型 1.1 为什么要使用聚合 聚合拥有明确的边界 聚合将领域分为...

  • 设计能力 - 你如何划分领域边界

    学习完整课程请移步 互联网 Java 全栈工程师 【领域驱动设计】浅谈聚合的划分与设计 聚合以及聚合根是领域驱动设...

  • 领域驱动设计-聚合和聚合根

    聚合 领域模型内的实体和值对象就好比个体,而能让实体和值对象协同工作的组织就是聚合,它用来确保这些领域对象在实现共...

  • 领域驱动设计DDD常用术语

    1.实体、值对象 2.聚合、聚合根 3.限界上下文 4.领域事件 5.核心域、支撑域、通用域 6.领域建模

  • 什么是聚合根

    对领域概念做静态建模的时候,有一类概念被视为聚合根(root)。它有自己的生灭过程,数据和行为聚合于其上,有...

  • 领域驱动设计案例-图书馆图书管理

    领域模型 实体与聚合根 读者和图书是实体;由于每个读者都将有自己的借书信息(比如,什么时候借的哪本书,是否已经归还...

  • 领域驱动开发参考

    代码结构 关键概念 DDD+CQRS 领域服务 不是具体的业务领域对象,但属于该业务领域,比如:查询列表、 聚合根...

网友评论

      本文标题:领域模型:聚合、聚合根

      本文链接:https://www.haomeiwen.com/subject/gdqnrftx.html