0

遵循 DDD 规则,聚合不应允许外部对象保存对其成员的引用。

如果聚合“发票”正在封装发票及其详细信息。汇总发票应如何提供信息,以便我可以显示详细信息或生成报告?

4

2 回答 2

1

在 DDD 的上下文中,持有引用意味着某种数据库引用。这并不意味着一旦从数据库中加载了聚合,就没有任何东西可以获取对其任何成员的运行时引用。这个想法是与聚合成员的所有交互都经过聚合,从而实现其作为一致性和完整性边界的作用。然而,出于显示和查询的目的,我更喜欢读取模型模式,其中查询特定的类用于表示查询数据,并且与用于表示聚合的类不同。这允许聚合专注于它的行为,而不用关心它可能是如何查询的。如果使用 CQRS +事件溯源,那么你聚合没有公共数据成员,只有行为方法。在这种情况下,查询被实现为基于聚合生成的事件的预测。

于 2012-07-27T17:10:00.310 回答
0

我允许客户持有对值对象的引用。我无所畏惧地返回 VO。我还将 VO 传递给聚合根上的公共方法。值对象是不可变的,因此不存在违反聚合一致性边界的外部状态更改的危险。

于 2015-03-06T01:53:42.633 回答