我有點困惑在哪裏實現應用程序的查詢方面,ATM我有未來的架構:CQRS查詢端執行
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,他們應該直接訪問數據庫從那裏? (UI < = Product.Application < =數據庫)
- 我應該創建新程序集Product.Queries和Product.UI.Web.Admin應該直接訪問它嗎? (UI < = Product.Queries)
- 我應該在Product.Application中添加Queries命名空間並創建新的Assembly Product.Reporting並讓Application程序集通過Queries命名空間使用Reporting assembly嗎? (UI < = Product.Application.Queries < = Product.Reporting)
三個解決方案返回DTO的到UI。
我正在考慮解決方案#3,因爲它會很容易在查詢中使用域服務建設成果,也將使用Product.Reporting作爲數據訪問可使用ADO.Net,實體實施框架或NHibernate。或者,也許我誤解了一些東西。
請指導我並幫助我清除它,謝謝。
UPDATE 我來到第四個變體。
- 創建Product.Infrastructure.Queries組裝,有我有數據庫(dbcotnext)& ReadModel(EF生成的模型& 通用查詢接口)命名空間。
- 新增的DataModel命名空間Product.Application,在那裏,我有DTO的返回UI
- 新增查詢命名空間Product.Application,在那裏,我實現通用查詢和使用的DbContext檢索數據,地圖的DTO和返回到用戶界面。
什麼是Product.Persistence.ReadModel?它是保存讀取模型的數據庫代碼嗎? – tomliversidge
如何在Product.Application.Queries中聲明查詢接口並在Product.Infrastructure.Queries中實現它們? – plalx
Product.Persistence.ReadModel中的@tomliversidge是由EF生成的數據庫模型,在Implementation Repository中接收Domain Model將其映射到ReadModel並且EF保存它,忘記提及我在Domain Model中具有存儲庫接口。 – QuietNaN