オンライン ストア プロジェクトの次のマイクロ サービスを検討してください。
ユーザー サービスは、ストアのユーザーに関するアカウント データを保持します (名、姓、電子メール アドレスなどを含む)。
購入サービスは、ユーザーの購入に関する詳細を追跡します。
各サービスは、関連するエンティティを表示および管理するための UI を提供します。購入サービスのインデックス ページには、購入品が一覧表示されます。各購入アイテムには、次のフィールドが必要です:
id、購入ユーザーの氏名、購入アイテムのタイトル、および価格。
また、インデックスページの一部として、店長が購入ユーザー名で購入品を検索できる検索ボックスが欲しいです。
Purchase Service が保持していないデータ (ユーザーの氏名など) を取得する方法がわかりません。ユーザー名を購入して検索購入などのより複雑なことをしようとすると、問題はさらに悪化します。
ユーザーの作成時に何らかのイベントをブロードキャストする (そして、関連するユーザー プロパティのみを Purchase Service 側に保存する) ことにより、2 つのサービス間でユーザーを同期することで、明らかにこれを解決できると考えました。私の観点では、それは理想とはほど遠いものです。何百万人ものユーザーがいる場合、これにどのように対処しますか? ユーザーデータを消費する各サービスで何百万ものレコードを作成しますか?
もう 1 つの明らかなオプションは、指定された ID に基づいてユーザーの詳細を返すユーザー サービス エンドで API を公開することです。つまり、購入サービスでページが読み込まれるたびに、適切なユーザー名を取得するためにユーザー サービスを呼び出す必要があります。理想的ではありませんが、私はそれと一緒に暮らすことができます。
ユーザー名に基づく購入検索の実装についてはどうですか? ユーザー サービス エンドでいつでも別の API エンドポイントを公開できます。このエンドポイントはクエリ用語を受け取り、ユーザー サービスでユーザー名に対してテキスト検索を実行し、条件に一致するすべてのユーザーの詳細を返します。購入サービスで、関連する ID を正しい名前にマップし直して、ページに表示します。このアプローチも理想的ではありません。
何か不足していますか?上記を実装するための別のアプローチはありますか?私がこの問題に直面しているという事実は、コードの匂いのようなものでしょうか? 他の解決策を聞きたいです。