我有参与这个问题以下层:查询Repository层中的多个实体时返回什么类型?
- 服务层(使用的IoC调用库)
- 域模型(POCO /域实体,定义储存库接口)
- 库层(EF。 EDMX并实施库)
很多时候,它真的直截了当:库层通过实体框架查询数据库,并返回IList<SomeDomainEntity>
对来电者说这是服务层。返回的类型是在域模型中定义的类型。
我遇到的问题是当我需要跨POCOs A,B和C进行查询并获取所有要返回的数据时。由于我不处理存储库中的任何逻辑,因此我需要将此数据返回到要处理的服务层(直接或通过调用域模型上的某些逻辑来更可能)。但是,我没有单一类型从存储库查询的结果中返回给调用者。
在我看到的例子中,一个匿名类型的课程处理了这个问题,但由于我没有直接在存储库中处理返回数据的逻辑,而需要返回它,所以我需要返回一个物理类型。这里有一些解决方案,我想到了,但不知道我喜欢的:
- 创建域模型一个新的域实体,基本上是所有我查询的数据的组合,所以这个新的单一类型都可以返回。这似乎是错误的创建abritrary类型来满足查询需求。
- 使服务层分别调用A,B,C实体上的各个存储库,然后处理来自每个返回对象的数据。这看起来像是很多额外的工作。
- 创建一个ViewModel返回。这对我来说似乎也不合适。我在我的服务层和UI层之间大量利用ViewModel类,但从未看到它们用于从存储库返回。
我不能是唯一一个跨多个实体查询以获得需要添加到类型并返回给调用者的数据集合的人。什么是解决我的问题的常见做法或标准方法?
谢谢!
我会选择1.根据您的查询创建视图并将视图映射到您的新域模型。 – Romoku 2013-02-20 17:28:56