问题:谁创建对象A?
解决方案:如果下面情况其中一个为真,则为B类分配创建对象A的责任(越多越好)
- - B包含或复合聚合A
- - B记录A
- - B密切使用A
- - B具有A 的初始化数据
例子:public class Customer : Entity, IAggregateRoot { private readonly List<Order> _orders;
public void AddOrder(List<OrderProduct> orderProducts) { var order = new Order(orderProducts); // Creator
if (this._orders.Count(x => x.IsOrderedToday()) >= 2) { throw new BusinessRuleValidationException("You cannot order more than 2 orders on the same day"); }
this._orders.Add(order);
this.AddDomainEvent(new OrderAddedEvent(order)); } }
|
如上所示, Customer类综合聚合 Orders(没有Customer的订单),记录订单,密切使用Orders并初始化方法参数传递的数据。“订单创建者”的理想候选人。(banq:在实际中在Customer中放入创建订单的责任不是一个好主意,还要结合单一职责,如果这个客户不只是创建订单,还做其他事情,都放在Customer中违背单一职责,而且Customer主要职责不是创建订单,而是维持自身客户信息。)