現在、CQS形式のDDDアプリケーションを構築中です。私は、すべての「コンポーネント」が互いにどのように機能するかに疑問を呈しています。
アプリケーションの構造と通信の方向に関する疑問
しかし、最初に、私は、アプリケーションの構造について簡単に説明あげる:
ApplicationService
-> Receives command objects
-> doesn't return any results
-> Acts on Domain model
-> Speaks with Aggregate repository for domain modifications
QueryService
-> Bypasses domain model; doesn't speak with Aggregate Repositories
-> Executes queries against database to populate view
-> Returns 'Representation' objects
REST Controller
-> Receives HTTP requests and binds 'body content' & request params to Command objects
-> delegates to ApplicationService for POST, PUT & DELETE requests
-> Always returns at least some HTTP code
-> delegates to QueryService for GET requests
Infrastructure
-> Handles persistence to DB
-> Contains some scheduling operations
-> Handles foreign domain events our domain model is 'interested' in
'Open Host'
-> This is mainly a Facade to be used by other domains
-> Facade delegates methods to ApplicationService for domain modifications and to QueryService for data retrieval (bypassing Repositories)
私の質問:
- はそれが
DomainEventHandler
はOKRepository
に対応し、いくつかを呼び出すことです方法についてはAggregate
?または、常にApplicationService
に対応する必要がありますか? QueryService
は、 'Representation
'オブジェクトを返します。これらはUIで使用され、戻り値として'Open Host' Facade
が使用されます。それはOKですか?これらのオブジェクトは戻り値としてFacade
によって再利用されますか?またはFacade
自分のオブジェクトを作成する必要があります、結果は基本的に同じですか?ApplicationService
は入力パラメータとして 'Commands
'をとります。でも、Commands
はOpen Host Facade
でも使われていますか?またはFacade
はプリミティブ値のみを受け入れ、ApplicationService
に委譲するときにCommands
に変換する必要がありますか?DomainEventHandlers
は、 'Infrastructure
'層にあるようです。ApplicationService
またはDomain Service
もDomain Event
にサブスクライブできますか?またはこれは常にInfrastructure
の責任ですか?
すべてのアドバイスは大歓迎です!
返信いただきありがとうございます。オープンホストサービスについて - 私はこれを他のドメインで使用されるインターフェースとして実装しました。これは、クロスドメイン通信のための単一の「アクセスポイント」と考えることができます。私のApplicationServiceは内部的にしか呼び出されません。 – user2054927
他のドメインはどのようにこれにアクセスしますか?インプロセスであるか、httpなどでですか?他のドメインで同じメッセージングインフラストラクチャを使用できるかどうかは、メッセージの公開や独自のメッセージへの反応です。このようにすればOpen Hostはまったく必要ないかもしれません。 – tomliversidge
他のドメインには2つの可能性があります。または、非同期に公開されるドメインイベントに反応します。またはそれらはファサード(=オープンホスト)に対応してデータを取得するか、または何らかのプロセスを呼び出す。ファサードは現在、単純なメソッド呼び出しによって呼び出されています。しかし、将来、これはMicroServiceアーキテクチャに進化するときにRESTサービスになるでしょう。 – user2054927