【问题标题】:Aggregates in DDD and Entity FrameworkDDD 和实体框架中的聚合
【发布时间】:2013-01-09 22:11:46
【问题描述】:

我有一个关于如何处理不代表数据库中数据的实体,而是我出于业务目的需要的定制实体的问题。

我的解决方案结构如下:

  • 实体程序集(POCO 对象)
  • 存储库程序集(EF 代码优先)
  • 业务层组装
  • UI 程序集 (MVC)

在我的实体程序集中,我有两个实体,AB,出于我的业务逻辑的特定目的,我需要返回一个包含这两个实体(以及其他属性)的对象:

class X
{
   public A[];
   public B[];
}

我应该直接从存储库返回这个对象吗?还是业务层调用repo.GetArepo.GetB然后创建X并返回?

在这种情况下,也许在业务层创建对象是有意义的。但是如果X 类是AB 的“分组依据”呢?然后从存储库中返回它更有意义。

我想没有灵丹妙药,但有什么指导方针吗?

干杯。

【问题讨论】:

  • 要遵循真正的 DDD,我认为您的 Entities 和 Repository 接口都应该在业务(域)层中。

标签: design-patterns domain-driven-design repository-pattern


【解决方案1】:

我认为你需要弄清楚X 属于哪个层以及它到底是什么:

  • 领域实体,即它从普遍存在的语言中传达领域概念。在这种情况下,X 可能是包含AB 子实体列表的聚合根。除了数据之外,它还可能有方法。 X 的存储库将保存 A 和 B 集合以及 X 对象,并且没有 AB 的存储库。

  • 特定于 UI 或特定于用例的数据结构。在这种情况下,域层与X 没有业务往来。应用程序或 UI 层将负责在 AB 实例与 X 对象之间进行映射。

【讨论】:

【解决方案2】:

我的理解是存储库应该始终处理业务类型的对象。对您而言,这相当于返回 X 类型对象的存储库。如何创建 X 是存储库的业务。这可以通过 2 个数据映射器获取 A 和 B 并合并结果或其他一些适当的过程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-17
    • 2016-11-05
    • 1970-01-01
    • 2017-05-21
    • 2021-10-20
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    相关资源
    最近更新 更多