域驱动设计子实体改变跟踪

时间:2013-05-20 19:39:05

标签: oop domain-driven-design repository-pattern domain-model aggregateroot

我在确定Aggregate Root如何跟踪子实体的变化时遇到了一些困难。

假设我有一个聚合:

  • 订单(根)
  • OrderLineItem

Order类是聚合根。如何跟踪OrderLineItemOrder类中每个{?}}所做的更改?

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

示例:

  • 新添加但未提交给DB
  • 已编辑但已致力于DB
  • 已编辑但未致力于DB

你们怎么处理这个?

1 个答案:

答案 0 :(得分:6)

  

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

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

  

当我创建一个存储库(实现)时,说OrderRepository是因为   只有聚合根可以使存储库正确吗?

是,每个聚合的存储库。