美文网首页DDD
DDD中的聚合根

DDD中的聚合根

作者: braveheart075 | 来源:发表于2018-12-23 13:35 被阅读0次

  最近在看一本书,看到了AGGREGATE(聚合),AGGREGATE root(聚合根)。下面解释下这两个的意思。
  在具有复杂关联的模型中,要想保证对象更改的一致性是很困难的。不仅互不关联的对象需要遵守一些固定规则,而且紧密关联的各组对象也要遵守一些固定规则。然而,过于谨慎的锁定机制又会导致多个用户之间毫无意义地互相干扰,从而使系统不可用[1]。
  借用书上的例子打个比方,汽车。汽车由发动机、车轮、引擎等组成。那么我们在实际开车等场景中,人去开车,我们怎么来建立这个模型。这个时候就用到来一个聚合的schema。也就是说我们需要用一个抽象来封装模型中的引用。 就是这个一组相关对象的集合,我们把他称为数据修改的单元。
  每个AGGREGATE都有一个根(root)和一个边界(boundary)。边界定义了AGGREGATE的内部都有什么。根则是AGGREGATE所包含的一个特定ENTITY。对AGGREGATE而言,外部对象只可以引用根,而边界内部的对象之间则可以互相引用。除根以外的其他ENTITY都有本地标识,但这些标识只在AGGREGATE内部才需要加以区别,因为外部对象除了根ENTITY之外看不到其他对象。
  汽车是一个具有全局标识的ENTITY:我们需要将这部汽车与世界上所有“其他汽车区分开(即使是一些非常相似的汽车)。我们可以使用车辆识别号来进行区分,车辆识别号是为每辆新汽车分配的唯一标识符。我们可能想通过4个轮子的位臵跟踪轮胎的转动历史。我们可能想知道每个轮胎的里程数和磨损度。要想知道哪个轮胎在哪儿,必须将轮胎标识为ENTITY。当脱离这辆车的上下文后,我们很可能就不再关心这些轮胎的标识了。如果更换了轮胎并将旧轮胎送到回收厂,那么软件将不再需要跟踪它们,它们会成为一堆废旧轮胎中的一部分。没有人会关心它们的转动历史。更重要的是,即使轮胎被安在汽车上,也不会有人通过系统查询特定的轮胎,然后看看这个轮胎在哪辆汽车上。人们只会在数据库中查找汽车,然后临时查看一下这部汽车的轮胎情况。因此,汽车是AGGREGATE的根ENTITY,而轮胎处于这个AGGREGATE的边界之内。另一方面,发动机组上面都刻有序列号,而且有时是独立于汽车被跟踪的。在一些应用程序中,发动机可以是自己的AGGREGATE的根。
  通俗异议的理解,就是我们在设计模型的时候,肯定是引用汽车这个entity。而非引用车轮和引擎等,所以car就是一个聚合根的概念。而和car相关的组件,组成了一个聚合的概念。

图解聚合和聚合根

[1]: [美] 埃里克 埃文斯(Eric Evans). “领域驱动设计 软件核心复杂性应对之道 修订版.”

相关文章

  • DDD中的聚合根

      最近在看一本书,看到了AGGREGATE(聚合),AGGREGATE root(聚合根)。下面解释下这两个的意...

  • Golang领域模型-领域事件

    前言: 在DDD中,一个业务用例对应一个事务,一个事务对应一个聚合根,在一次事务中,只能对一个聚合根进行操作。那么...

  • DDD之4聚合和聚合根

    聚合就是归类的意思,把同类事物统一处理;聚合根也就是最抽象,最普遍的特性; 背景 领域建模的过程回顾: 那么问题来...

  • 多研究些架构,少谈些框架(2):微服务和充血模型

    上篇我们聊了微服务的DDD之间的关系,很多人还是觉得很虚幻,DDD那么复杂的理论,聚合根、值对象、事件溯源,到底我...

  • 领域驱动开发参考

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

  • 领域驱动设计 DDD 实践

    背景 DDD 领域驱动设计,想必大家都已经耳熟能详了,经常能听到『事件风暴』、『聚合根』、『限界上下文』等等名词,...

  • 大话DDD — 聚合、仓库与工厂

    DDD中的工厂和设计模式中的工厂不是同一个概念 聚合 聚合表达的是真实世界中整体和部分的关系,例如订单与订单明细。...

  • ddd

    DDD理解:基本概念:DDD战略思想:领域、子领域、限界上下文、通用语言、下文映射图、架构风格DDD战术实现:聚合...

  • 大话DDD — 服务、实体、值对象、聚合根

    基于DDD的程序设计,就是将前面的领域模型映射成数据架构中的程序设计,从而通过领域驱动提升软件设计质量,那么应该进...

  • 领域驱动设计系列文章

    这张图代表横向和纵向两个方向,分析一个系统要从这两个方向入手: 首先纵向,用DDD找出聚合根实体,代表这个系统的结...

网友评论

    本文标题:DDD中的聚合根

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