【发布时间】:2016-08-29 19:05:35
【问题描述】:
我有点困惑在哪里实现应用程序的查询端,atm 我有下一个架构:
Product.UI.Web.Admin (MVC)
Product.Application
-CommandHandlers (e.g OrdersCommandHandler)
-Commands (e.g CreateOrder)
Product.Domain
-Model (Behavior-rich models / repository interfaces)
Product.Infrastructure (Base interfaces / classes)
Product.Persistence
-ReadModel (EF Generated models)
--Implementation (Repository implementations: FindByID / Save)
- 我应该在 Product.Application 中放置 Queries 命名空间,并且它们应该直接从那里访问数据库吗? (UI
- 我应该创建新的程序集 Product.Queries 和 Product.UI.Web.Admin 应该直接访问它吗? (用户界面
- 我是否应该在 Product.Application 中添加 Queries 命名空间并创建新的 Assembly Product.Reporting 并让 Application 程序集通过 Queries 命名空间使用 Reporting 程序集? (UI
所有三个解决方案都将 DTO 返回到 UI。
我正在考虑解决方案 #3,因为它很容易在查询中使用 Domain Services 来构建结果,并且它还将使用 Product.Reporting 作为 Data Access可以使用 ADO.Net、Entity Framework 或 NHibernate 来实现。或者我误解了什么。
请指导我,帮我清理一下,谢谢。
更新 我来到了第四个变种。
- 创建了 Product.Infrastructure.Queries 程序集,我有数据库 (dbcotnext) 和 ReadModel(EF 生成模型和 通用查询接口)命名空间。
- 在 Product.Application 中添加了 DataModel 命名空间,我有 DTO 可以返回 UI
- 在 Product.Application 中添加了 Queries 命名空间,在那里我实现了通用查询并使用 dbcontext 检索数据、映射到 DTO 并返回到 UI。
【问题讨论】:
-
Product.Persistence.ReadModel 中有什么?是保存读取模型的数据库代码吗?
-
在 Product.Application.Queries 中声明查询接口并在 Product.Infrastructure.Queries 中实现呢?
-
Product.Persistence.ReadModel 中的 @tomliversidge 是 EF 生成的数据库模型,在 Implementation Repository 接收域模型将其映射到 ReadModel 并 EF 保存它,忘了提到我在域模型中有存储库接口。
-
@plalx hm,还没有考虑过,我会尝试一下,atm 我正在寻找最佳实践以避免将来进行大规模重构;)但是如果我在基础设施中实现查询,则会出现一个问题,某些查询将不得不使用在应用程序服务层中实现的 DomainServices。我想我应该依赖注入它们吧?
-
为什么查询需要域服务?