マイクロサービスアーキテクチャを使用するSpring Bootアプリケーションがあるとします。各サービスには独自のドメインモデルがありますが、各サービスはユーザードメインオブジェクトを参照する必要があります。この問題を解決する最善の方法は何ですか?各サービスが単にuserIdを保持し、必要に応じてユーザーサービスにユーザーの詳細を要求するのが良いのでしょうか、それともすべてのマイクロサービスに共有ドメインライブラリがあるのが良いのでしょうか?
マイクロサービスがスケーラビリティ、疎結合、および各サービスの簡単な独立した修正の恩恵を受けるために行った場合は、可能な限り最大限に固執する必要があります。
全体的なアーキテクチャ
私は最良のアプローチは次のようになると思います:
追加の読み:
コード共有
上記のソリューションに同意すると、ユーザーマイクロサービス(ユーザーのカプセル化ドメインモデル)があり、他のすべてのサービスは同じマイクロサービスのコンシューマーです。問題はあなたが望むかどうかを知ることです:
このコード共有のトピックについては、オピニオンされたオピニオンウォーがあり、私は客観的な立場を取る立場にはないと私は考えています。すでにいくつかの追加の読み物があります:
これについての私見では、密結合を避けるために、ユーザープロバイダーとユーザーコンシューマーの間でコードを共有しないでください。ただし、強力なバージョン管理を実施している場合は、ユーザー消費コードをコンシューマー間で共有できます。このアプローチにはいくつかの利点があります。
できれば共有ライブラリは避けます。各サービスに必要なユーザーのプロパティは何ですか?多くの場合、ユーザーを取り巻くほとんどの動作が存在するコアドメインがあり、サポートドメインは多くの場合userIdのみを必要とします。
サービスでユーザーに関するその他の詳細が必要な場合は、そのような状況に対処する方法に関するいくつかの提案 here を参照してください。