DDD基础 (聚合 && 聚合根)

本文深入探讨了领域驱动设计(DDD)中的聚合和聚合根概念。聚合是由业务逻辑紧密关联的实体和值对象组成的单元,是数据持久化的最小单位。货架在SPT陈列场景中作为一个聚合的例子,包含二级类目、一级类目和货架设备等实体。聚合根作为聚合的管理者,是外部访问聚合内其他对象的入口,确保了数据一致性。例如,在组织结构中,事业部是聚合,其领导人作为聚合根,协调员工工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

聚合(Aggregate)

聚合根(AggregateRoot)

上一章,我们介绍到了实体和值对象,并且介绍了实体和值对象什么场景下应该如何创建。本章介绍聚合和聚合根。
实体和值对象是我们领域建模的基本单元,我们根据用户的一些业务操作中,业务关联紧密的实体和值对象进行组合,构成聚合(Aggregate),再根据业务语义将多个聚合划定到一个界限上下文中(Bound Context),并在界限上下文内完成建模。

那什么是聚合呢?

举个例子:我们阿里巴巴西溪园区8号楼的每一个员工都是一个个个体(实体,每个人独一无二),而能让我们每个个体协同起来一起工作就是组织,比如:盒马事业部、阿里妈妈事业部、淘宝事业部,就是这个组织,每个事业部独一无二,而每个事业部就就一个聚合。它用来确保这些领域对象(我们每个员工)在实现共同的(业务目标)业务逻辑时,能保证数据的一致性。

套到SPT陈列场景,二级类目、一级类目、货架设备(货架的高、宽、深是一个值对象valueObject)都是一个实体,而能让这些实体发挥作用共同完成业务功能的是货架(货架就是一个聚合)。
总而言之,聚合就是由业务和逻辑紧密关联的实体和值对象组合而成的。聚合是数据持久化的单元,每个聚合对应一个仓储。

而每一个事业部都有一个总裁领导人,每个领导人就是一个聚合根(AggregateRoot),也叫根实体,它不仅是实体,还是聚合的管理者。首先它是一个实体,所以它有自己的属性和业务行为,实现自己的业务逻辑。最后,它还是聚合的接口人,也就是说你想要访问聚合内的实体或者值对象必须要先访问聚合根,再导航到内部实体,不可以直接访问实体。

### 关于DDD中的聚合根 #### 定义与作用 在领域驱动设计(DDD)中,聚合是一个重要的概念,而聚合根则是该集合的核心实体。聚合由多个相互关联的对象组成,这些对象作为一个整体共同维护业务规则的一致性和完整性[^1]。 聚合根是指定给特定聚合的一个入口点,它负责管理整个聚合的生命期并控制外部对该内部成员的访问权限。这意味着只有通过聚合根才能操作其所属的任何组件实例,从而确保数据一致性和封装性[^2]。 #### 设计模式与最佳实践 为了有效地利用聚合根,在实际项目开发过程中应当遵循一些基本的设计准则: - **保持一致性边界**:每个聚合都有自己的事务边界,即在一个原子性的单位内完成所有更改而不影响其他部分的状态。 - **定义清晰的责任范围**:明确定义哪些行为属于某个具体的聚合及其根节点处理,并且只允许必要的交互跨越不同聚合之间。 - **简化依赖关系图谱**:尽量减少跨聚合之间的直接联系,转而在更高层次上建立协作机制(如事件发布订阅),这样有助于降低系统的耦合度并提高可测试性。 ```csharp public class Order : IEntity, IAggregateRoot { public Guid Id { get; private set; } // Other properties... public void AddOrderItem(Product product, int quantity){ var item = new OrderItem(this, product, quantity); Items.Add(item); ApplyChange(new OrderItemAddedEvent(Id, item)); } protected List<OrderItem> _items; public IReadOnlyCollection<OrderItem> Items => _items.AsReadOnly(); } ``` 在此示例中`Order`类作为订单聚合的根,具有唯一标识符Id和其他属性。添加商品项的操作必须经由AddOrderItem方法执行,这不仅实现了对外部世界的隔离还保障了内部状态变化的通知机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值