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

Pat*_*k87 6 oop domain-driven-design aggregateroot repository-pattern domain-model

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

假设我有一个聚合:

  • 订单(根)
  • 的OrderLineItem

随着Order类是总根源.我将如何跟踪每个所做的更改OrderLineItemOrder课吗?

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

例:

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

你们怎么处理这个?

eul*_*rfx 6

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

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

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

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