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

时间:2013-10-31 10:42:49

标签: entity-framework domain-driven-design aggregateroot

我偶然发现了StackOverflow和Google以及其他网站,但却无法理解如何实现它。

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

所以根据DDD原则,我应该只实现ItemRepository。除了它自己的-lets说 - CRUD操作之外,ItemRepository也应该管理它的子实体{,ItemActivity,CRUD操作。

以下是一些实施问题:

  1. 我应该在域中实现子实体操作还是 库中。
  2. 加载与项目相关的所有子实体或导航到它们 实体框架没问题。使用.include(..)加载根目录 做的工作。但是如果更新ItemActivity甚至更新 删除ItemActivity?从集合中删除它们不会 持续。
  3. 假设我必须在一段时间内找到所有活动。怎么样 我无法查询时可以实现这样的查询 ItemActivity或更糟糕的是没有任何 完全ItemActivityRepository
  4. 是否有涵盖此主题的示例。有很多文章 关于它的写作,许多答案没有具体的代码和理论 但请注意,是否有真实样本。我一直在努力 微软西班牙的N-Layered DDD Sample,但不够详细。
  5. 最好的问候。

1 个答案:

答案 0 :(得分:3)

  

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

没有。存储库仅操纵聚合。

  

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

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

3.假设我必须在一段时间内找到所有活动。

如果需要按范围查询,最好使ItemActivity成为另一个聚合根。较小的聚合可以帮助解决这个问题。

4.Is there a sample covering this topic.

着名的Effective Aggregate Design。有一些示例代码(特别是在第1部分中)与您的案例密切相关。