【发布时间】:2015-11-22 04:25:58
【问题描述】:
我一直在阅读 Eric Evan 关于 DDD 的书,他在第 139 页上说:
"如果您需要在预先存在的 AGGREGATE 中添加元素,您可以在 AGGREGATE 的根目录上创建 FACTORY METHOD"
我假设可以像这样实现,其中方法 NewLineItem 用于创建新订单项并将其添加到订单中。
class Order
{
public IEnumerable<LineItem> LineItems { get; }
public void NewLineItem(Product product, int quantity);
}
我可以想到的另一种方法是将工厂方法移动到集合本身。下面是这样的。然后我可以通过调用 LineItems.New(...) 添加一个新项目。
class Order
{
public LineItems LineItems { get; }
public class LineItems : IEnumerable<LineItem>
{
public void New(Product product, int quantity);
}
}
每种方法的优缺点是什么?将工厂方法移动到集合中是否有任何问题?我们目前正在尝试找出实现大型域模型的最佳方法。我们担心其中一些根聚合模型会因大量工厂方法和删除方法(例如 RemoveLineItem(LineItem))而变得臃肿。我们的想法是,将这些工厂方法移到它们的集合中有助于组织设计并保持根聚合不那么杂乱无章。有什么建议吗?
谢谢
【问题讨论】: