我在这个问题中涉及以下层:
- 服务层(使用 IoC 调用 Repository)
- 域模型(POCO / 域实体,定义的存储库接口)
- 存储库层(EF .edmx 和实施的存储库)
很多时候它真的很简单:存储层通过实体框架查询数据库并返回IList<SomeDomainEntity>
给服务层的调用者。返回的类型是领域模型中定义的类型。
我遇到的问题是当我需要查询 POCO A、B 和 C 并从所有要返回的数据中获取数据时。由于我不处理存储库中的任何逻辑,因此我需要将此数据返回到服务层进行处理(直接或更有可能通过调用域模型上的某些逻辑)。但是,我不再有从存储库查询结果返回给调用者的单一类型。
在我看到的示例中,一个匿名类型当然会处理这个问题,但由于我没有直接在存储库中处理来自返回数据的逻辑并且它需要返回,所以我需要一个物理类型来返回。以下是我想到的一些解决方案,但不确定我是否喜欢:
- 在域模型中创建一个新的域实体,它本质上是我查询的所有数据的组合,因此可以返回这个新的单一类型。创建满足查询需求的任意类型似乎是错误的。
- 使服务层分别调用 A、B、C 实体上的各个存储库,然后处理来自每个返回对象的数据。这似乎是很多额外的工作。
- 创建要返回的 ViewModel。这对我来说似乎也不合适。我在服务层和 UI 层之间大量使用 ViewModel 类,但从未见过它们被用于从存储库返回。
我不能是唯一一个跨多个实体查询以获取需要添加到类型并返回给调用者的数据集合的人。解决我的问题的常见做法或标准方法是什么?
谢谢!