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