7

我在弄清楚聚合根如何跟踪子实体的变化时遇到了一些困难。

假设我有一个聚合:

  • 订单(根)
  • 订单行项目

类是Order聚合根。我将如何跟踪对每个课程所做的OrderLineItem更改Order

当我创建一个存储库(实现)例如一个OrderRepository(因为只有聚合根可以拥有存储库吗?)时,我将如何OrderRepository跟踪每个的更改OrderLineItem

例子:

  • 新添加但未提交到数据库
  • 已编辑但提交给 DB
  • 已编辑但未提交给数据库

你们如何处理这个问题?

4

1 回答 1

7

现在 Order 类是聚合根,我将如何通过 Order 类跟踪对每个 OrderLineItem 所做的更改?

对聚合的所有更改Order,包括OrderLineItem,都应该通过聚合根。这样,聚合可以保持其完整性。至于跟踪更改,这取决于您的持久性实现。如果使用诸如 EF 或 NHibernate 之类的 ORM,那么 ORM 将负责跟踪更改。如果使用事件溯源,则更改将作为一系列事件显式跟踪,通常由 OOP 实现中的聚合维护。如果直接使用 SQL,您还可以避免跟踪更改并在每次提交时更新整个聚合。

当我创建存储库(实现)时说 OrderRepository 因为只有聚合根才能拥有存储库?

是的,每个聚合的存储库。

于 2013-05-20T19:51:28.417 回答