我有一个问题,关于如何处理不是数据库中数据表示的实体,而是为业务目的需要的定制实体。
我的解决方案结构如下:
在我的实体程序集中,我有两个实体A
和B
,为了我的业务逻辑的特定目的,我需要返回一个包含两个(以及其他属性)的对象: / p>
class X
{
public A[];
public B[];
}
我应该直接从存储库返回此对象吗?或者业务层是否应该调用repo.GetA
和repo.GetB
,然后创建X
并将其返回?
在这种情况下,也许在业务层中创建对象是有意义的。但是如果X
类是A
和B
的“分组依据”怎么办?然后从存储库返回它更有意义。
我想没有银弹,但有没有指导方针?
干杯。
答案 0 :(得分:4)
我认为你需要找出X
属于哪个层以及它到底是什么:
域实体,即它从普遍存在的语言传达域概念。在这种情况下,X
可能是一个聚合根,其中包含A
和B
个子实体的列表。除数据外,它还可能有方法。 X
的存储库会将A和B集合与X
个对象一起保留,并且A
或B
没有存储库。
特定于UI或用例的数据结构。在这种情况下,域图层与X
没有业务关系。应用程序或UI层将负责执行A
和B
实例与X
对象之间的映射。
答案 1 :(得分:2)
我的理解是存储库应始终处理业务类型对象。对于您而言,这相当于返回类型为X的对象的存储库。如何创建X是存储库的业务。这可以通过2个数据映射器获得A然后B并合并结果或其他适当的过程。