こんにちは私はプロジェクトスケルトンを使用しようとしています [〜#〜] cqrs [〜#〜] パターンといくつかの外部サービスを使用しています。以下は、ソリューションの構造です。
コントローラーを薄く保つ必要があります。したがって、それぞれの操作を処理するためにクエリハンドラーとコマンドハンドラーを使用しています。
ただし、外部のマイクロサービスを使用して、クエリハンドラーから呼び出しているデータを取得します。すべてのhttp clinet構築と呼び出しがそれらで抽象化されます。応答はビューモデルに変換され、クエリハンドラーに渡されます。
ApiGateways と名付けます。ただし、複数のサービスから構成されているわけではありません。私たちのソリューションでは、この部分をどのように呼びますか?プロキシか何か?シンコントローラーとマイクロサービスアーキテクチャの良い例
CQRSは、読み取り操作と書き込み操作を分離しておくための正しい選択だと思います。
サードパーティシステムとの統合(そうである場合)には、注意が必要です。これらのサービスをハンドラーから直接呼び出さないでください。これにより、さまざまなパフォーマンスやメンテナンス性の問題が発生する可能性があります。
これらの統合はドメイン外にあるため、非常によく分離する必要があります。それらは、非効率、変更、または制御不能な多くの問題の影響を受ける可能性があります。
私がお勧めできるソリューションの1つは、「ミドルウェア」サービスです。
アプリケーションのコンテキストでは、これは別のサービス(常にRESTなど))で構成でき、単一システムの統合ポイントとして機能する、外部システムとの(彼のみ)のタスクを実行しますドメインと外部環境の間。これは、ゼロから、または(例として) this のような商用/オープンソースソリューションを使用して実現できます。
これにより、次のような多くの利点がもたらされます。
これらの質問に焦点を合わせると、統合ミドルウェアサービスを設計するのに役立ちます。
最後に、マイクロサービス指向のシステムの必要性が現実的かつ緊急の必要性であるかどうかを理解することも非常に重要です。これらのアーキテクチャは従来のアーキテクチャよりも高価で複雑なため、モノリスシステムを構築してから、後でよりセグメント化されたソリューションに移行することを検討するのが妥当かもしれません。システムをいくつもの " bounded context "と考える(整理する)ことは、優れたモノリスシステムの作成を妨げることはありません。同時に、マイクロサービス指向のシステムへの切り替えの準備をします。
まとめのアドバイスとして、まず物事をできるだけ分離することから始めます。 言語 を定義して、ビジネスモデルについて話します。これらは、必然的にソフトウェアの進化の間に必然的に多大な努力を必要としないときに、多くの変化をもたらす可能性があります。 " Hexagonal "アーキテクチャは、両方の選択肢(マイクロサービスとモノリス)でそれを行うための良い出発点です。最近、Netflixがこのアーキテクチャについて素晴らしい article を投稿しました。
DDDとクリーンアーキテクチャの観点から、私の答えを示します。理想的には、アプリケーションには次のレイヤーが必要です。
そのため、クリーンアーキテクチャ上のさまざまなレイヤーに関する基本コンテキストを設定した後、元の質問に対する答えは->プロバイダーレイヤーでサードパーティの相互作用を作成します。たとえば、ユーザーマイクロサービスに接続する必要がある場合は、インフラストラクチャレイヤーのプロバイダーフォルダーにUserProviderを作成し、インターフェイスを介して使用します。