- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在阅读 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))而变得臃肿。我们的想法是,将这些工厂方法移动到它们的集合中有助于组织设计并使根聚合减少方法的困惑。有什么建议吗?
谢谢
最佳答案
直接在 AR 上使用工厂方法的一个优点是,它使 AR 知道更改并允许它强制执行它的不变量。不仅如此,由于该方法了解 AR 的内部状态,您可以减少传递给工厂方法的参数数量(在创建其他相关 AR 时最有用)。
例如registration = course.register(registrant)
与 registration = new Registration(registrant, courseId)
此外,LineItem
成为一个实现细节,因此客户端不需要知道该类。
您问这个问题并且实际上担心您的 AR 上有太多方法这一事实可能表明您可能将不属于一起的对象聚集在一起。
不要忽视 AR 的主要目的:它是一个允许保护不变量的事务边界。如果没有要保护的不变量,那么聚类可能是不必要的,甚至是不可取的。
我强烈建议您阅读 Effective Aggregate Design作者:Vauhgn Vernon。
关于domain-driven-design - 在 DDD 中的聚合根上创建子实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33851581/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!