臭名昭著的实体框架 - 聚合根问题

Kad*_*r.K 5 domain-driven-design entity-framework aggregateroot

我偶然发现了 StackOverflow 和 Google 以及其他网站,但无法掌握如何实现它的概念。

这里我有一个非常非常简单的模型:AnItem和 an ItemActivity。显然, 是Item聚合根, 是ItemActivity实体。

所以根据 DDD 原则我应该只实现ItemRepository. 除了它自己的 CRUD 操作之外,ItemRepository还应该管理其子实体的ItemActivityCRUD 操作。

这里出现了一些实施问题:

  1. 我应该在域或存储库中实现子实体操作吗?
  2. 使用实体框架可以加载与某个项目相关的所有子实体或导航到它们。加载根目录.include(..)即可完成工作。但是更新ItemActivity甚至删除怎么办ItemActivity?从集合中删除它们不会持续存在。
  3. 假设我必须找到一段时间内的所有活动。当我无法查询 ItemActivity或更糟糕的是 ItemActivityRepository根本不存在任何查询时,如何实现这样的查询。
  4. 有涵盖该主题的示例吗?有很多关于它的文章,很多答案没有具体的代码和理论覆盖范围,但是请问有没有真实的示例。我曾研究过 Microsoft Spain N-Layered DDD Sample,但不够详细。

此致。

Yug*_*hou 3

1.我应该在域还是存储库中实现子实体操作。

不,存储库仅操作聚合。

2.使用实体框架加载与某个项目相关的所有子实体或导航到它们是可以的。使用 .include(..) 加载根目录即可完成工作。但是更新 ItemActivity 甚至删除 ItemActivity 又如何呢?从集合中删除它们不会持续存在。

  Item.getActivity().updateRemark("...");
  ItemRepository.store(Item);
Run Code Online (Sandbox Code Playgroud)

3.假设我必须找到一个时间范围内的所有活动。

如果需要按范围查询,最好将 ItemActivity 设为另一个聚合根。较小的聚集体有助于这种情况。

4.Is there a sample covering this topic.
Run Code Online (Sandbox Code Playgroud)

著名的有效聚合设计。有一些示例代码(特别是在第 1 部分中)与您的案例密切相关。