分散アーキテクチャ(クライアントサーバー)があるとしましょう。クライアント側にはServerEntityクラスがあり、クライアント側にはそのClientEntityクラスがあります。ClientEntityがServerEntityにデータを要求するだけでよいのです。私は最近DDDアプローチを学び始めましたが、実際にはドメインイベントが好きなので、それを使いました。これが、将来の実装に対する私の単純な期待です。
- ClientEntityはコマンドRequestDataCommandを作成し、それを公開します(たとえば、MessageBusを介して)
- クライアントのApplicationLayerはこのコマンドを取得し、それを接続してサーバーに送信します
- サーバーのApplicationLayerはコマンドを受信し、コマンドをMessageBusにプッシュします
- ServerEntityはコマンドを受信し、いくつかのデータを含むドメインイベントを公開します
- サーバーのApplicationLayerはこのイベントを取得し、接続してクライアントに送信します
- クライアントのApplicationLayerはイベントを受信し、コマンドをDomainEventManagerにプッシュします
- ClientEntityはイベントにサブスクライブされ、受信すると内部状態が変更されます。
上記のアプローチの欠点は、数十のコマンドクラスが作成されることです。
一方、別のオプションがあります。IRequestDataServiceのようなドメインサービスインターフェイスを作成し、ClientEntityの依存関係として作成します。したがって、コマンドクラスを作成してメッセージバスに渡す必要はありません。IRequestDataServiceから適切なメソッドを呼び出すだけです。サーバーからの応答は、前の例のようにドメインイベントとして受信されます。
2番目のアプローチの欠点は、コマンドを送信するためだけにサービスを使用することです。これは、私のビジョンでは同期操作のみを実行する必要があります。
どちらのアプローチが優れているのでしょうか。クライアントサーバー通信について正しい方法だと思いますか。