は、私は、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にクエリの名前空間を追加し、新しいアセンブリProduct.Reportingを作成して、アプリケーションアセンブリがクエリの名前空間でレポートアセンブリを使用するようにしますか? (UI < = Product.Application.Queries < = Product.Reporting)
は、すべての3つのソリューションは、UIへのDTOを返します。結果を構築するためにクエリでドメインサービスを使用して簡単になるよう
は、私は解決策#3考えていますし、またそれは、エンティティをADO.Netを使用して実装することができるデータアクセスとしてProduct.Reportingを使用します。フレームワークまたはNHibernate。または、私は何かを誤解したかもしれません。
私を案内して、それをクリアするのを手伝ってください、ありがとうございます。
更新 私は4番目の変種に来ました。 Product.Infrastructure.Queriesアセンブリを作成し
- 、そこに私は、データベース(dbcotnext)& ReadModel(EF生成されたモデル& 一般的なクエリインターフェース)名前空間を持っています。
- 追加Product.ApplicationでのDataModel名前空間、そこに私がUI にProduct.Applicationで
- 追加クエリ名前空間を返すためのDTOを持って、そこに私は、一般的なクエリを実行し、データを取得するためにdbcontext使用、のDTOにマッピングし、 UIに戻ります。
Product.Persistence.ReadModelには何がありますか?読み取りモデルを保存するデータベースコードですか? – tomliversidge
Product.Application.Queriesでクエリインターフェイスを宣言し、Product.Infrastructure.Queriesに実装するのはどうですか? – plalx
Product.Persistence.ReadModelの@tomliversidgeは、EFによって生成されたデータベースモデルで、実装リポジトリはDomain Modelを受け取ってReadModelにマップし、EFはそれを保存します。ドメインモデルにリポジトリインタフェースがあることを忘れてしまいました。 – QuietNaN