2012-05-02 10 views
0

私はペットプロジェクトでCQRSを適用しようとしています。私の例では、FoodCourseです。複雑なタイプのコマンド

コースはさまざまな食べ物で構成されています。私の設計では

私はそれらのコマンドを持っている:

AddFoodToCourseChangeFoodQuantityInCourse等...

私はCourseCommandHandlerを作成した場合、私はコースを変更するために、依存関係としてICourseRepositoryを取得しますが、私'LL簡単なコマンドを維持食品の代わりにCourseIdとFoodIdプロパティを持っている

ハンドラでは、Idsだけを管理し、関連するすべてのデータをリポジトリから取得するかどうかを確認する必要がありますか?

私が理解している場合は正しく私のアプリは、このワークフローに従う必要があります。

使用をReadModel =>domain objectで動作し、repositories =>Domain objectsレイズのイベントでオブジェクトを保存し、コマンドを作成し、>CommandHandlerコマンドを消費=バスに送りますバスに公開=>EventHandlerイベントを消費し、私はIDのみを管理し、リポジトリからすべての関連 データを取得したりしないように仮定ハンドラではReadModelオブジェクト

答えて

2

を修正?

正しいです。コマンドハンドラは、コマンドを処理するために必要なリポジトリや他の依存関係を注入する場所です。あなたが述べたように、コマンドは、エンティティ自体ではなくIDを使用してエンティティを参照する必要があります。これは、コマンドがシリアル化され、アプリケーションの境界を越えて渡されるためです。あなたのワークフローも正しいです。被験者の詳細な治療については、hereをご覧ください。

+0

私は、必要なリポジトリを注入する必要があると言いますが、代わりにエンティティのロード/保存を許可する一意のリポジトリを作成する必要があります。 –

+0

典型的なCQRSリポジトリは、GUIDによってキーされた様々な型のイベントを格納できるイベントストアですが、リポジトリの実装はあなた次第です。 – eulerfx

関連する問題