3

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

我的解决方案结构如下:

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

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

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

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

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

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

干杯。

4

2 回答 2

4

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

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

  • 特定于 UI 或特定于用例的数据结构。在这种情况下,领域层与X. 应用程序或 UI 层将负责在实例和A对象之间进行映射。BX

于 2013-01-09T14:11:46.793 回答
2

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

于 2013-01-09T12:26:01.340 回答