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



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

在这里,我有一个非常简单的模型:ItemItemActivity。很明显,Item是聚合根,ItemActivity是一个实体。

所以根据DDD原则,我应该只实施ItemRepository。除了自己的 - 比方说 - CRUD 操作外,ItemRepository还应该管理其子实体ItemActivity 的 CRUD 操作。

下面是一些实现问题:

  1. 我应该在域中实现子实体操作还是存储 库。
  2. 加载与项相关的所有子实体或导航到它们适用于实体框架。用.include(..)意志加载根做工作。但是更新ItemActivity甚至更新呢删除ItemActivity?从集合中删除它们不会坚持。
  3. 假设我必须找到一个时间跨度内的所有活动。如何当我无法查询时,是否可以实现这样的查询 ItemActivity或更糟的是,不存在任何 根本ItemActivityRepository
  4. 是否有涵盖此主题的示例。有很多文章写过它,很多答案没有具体的代码和理论覆盖范围,但请问是否有任何真实的样本。我曾从事过Microsoft西班牙 N 层 DDD 示例,但不够详细。

此致敬意。

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

否。存储库仅操作聚合。

2.使用实体框架可以加载与项相关的所有子实体或导航到它们。使用 .include(..) 加载根目录将 做工作。但是更新项目活动甚至删除呢? 项目活动?从集合中删除它们不会保留。

  Item.getActivity().updateRemark("...");
  ItemRepository.store(Item);

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

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

4.Is there a sample covering this topic.

著名的有效骨料设计。有一些示例代码(尤其是在第 1 部分中)与您的情况密切相关。

最新更新