聚合(Aggregate)
聚合根(AggregateRoot)
上一章,我们介绍到了实体和值对象,并且介绍了实体和值对象什么场景下应该如何创建。本章介绍聚合和聚合根。
实体和值对象是我们领域建模的基本单元,我们根据用户的一些业务操作中,业务关联紧密的实体和值对象进行组合,构成聚合(Aggregate),再根据业务语义将多个聚合划定到一个界限上下文中(Bound Context),并在界限上下文内完成建模。
那什么是聚合呢?
举个例子:我们阿里巴巴西溪园区8号楼的每一个员工都是一个个个体(实体,每个人独一无二),而能让我们每个个体协同起来一起工作就是组织,比如:盒马事业部、阿里妈妈事业部、淘宝事业部,就是这个组织,每个事业部独一无二,而每个事业部就就一个聚合。它用来确保这些领域对象(我们每个员工)在实现共同的(业务目标)业务逻辑时,能保证数据的一致性。
套到SPT陈列场景,二级类目、一级类目、货架设备(货架的高、宽、深是一个值对象valueObject)都是一个实体,而能让这些实体发挥作用共同完成业务功能的是货架(货架就是一个聚合)。
总而言之,聚合就是由业务和逻辑紧密关联的实体和值对象组合而成的。聚合是数据持久化的单元,每个聚合对应一个仓储。
而每一个事业部都有一个总裁*,每个*就是一个聚合根(AggregateRoot),也叫根实体,它不仅是实体,还是聚合的管理者。首先它是一个实体,所以它有自己的属性和业务行为,实现自己的业务逻辑。最后,它还是聚合的接口人,也就是说你想要访问聚合内的实体或者值对象必须要先访问聚合根,再导航到内部实体,不可以直接访问实体。