新しいアプリのアーキテクチャを設計しています。マイクロサービスアーキテクチャを選択しました。このアーキテクチャでは、異なるマイクロサービスで使用されるモデルがあることに気付きました。各マイクロサービスにモデルコードを書き込むのではなく、マイクロサービス間でモデルコードを共有する方法があるかどうかを知りたいです。
ちなみに、私は私のアプリに春のブートフレームワークを使用しています。
一般的なモデルを使用して別のプロジェクトを作成し、このプロジェクトのjarを作成して、このjarの依存関係を他のマイクロサービスに追加できます。
しかし、私には実際的な経験があります。この共通プロジェクトを維持するのは悪夢です。変更するたびに、新しいバージョンを作成し、すべてのマイクロサービスのビルドスクリプトを更新する必要があるためです。
私の意見では、マイクロサービス間でモデルを共有するべきではありません。
あなたがこの決定について厳格であるならば、あなたはいずれにしても不十分な状態に遭遇するでしょう。 SDLCとチームのダイナミクスによって異なります。 Ipswitchには、すべてが連携する多くのサービスがあり、デバイスやモニターなどの高度に共有された概念があります。各サービスにそれらのための独自のモデルを持たせることは、持続不可能です。私たちはそれを1つのケースで行い、翻訳は余分な作業を作成し、不整合の欠陥をもたらしました。しかし、そのシステム全体が1つの大規模な開発チームによって一緒に構築されています。共有はそこで最も理にかなっています。ただし、マイクロサービス全体に複数のチームと複数のSDLCがある企業では、結合を避けるためにモデルを分離する方が理にかなっています。ただし、その場合でも、特定のチームが管理する密接に連携している一連のサービスは、チームがそうすることのリスク/利点を受け入れる場合、モデルを確実に共有できます。学者や哲学以外には何も問題はありません。
要するに、最小限の共有だけでなく、チームの不要な作業も避けてください。
モデルクラスを別のプロジェクト/リポジトリに移動し、共有する必要があるマイクロサービスへの依存関係として追加できます。
マイクロサービスがSwaggerを使用しているかどうかはわかりませんが、 Swagger Codegen を使用してモデルを生成できます。
たとえば、Userオブジェクトを受け入れたり返したりするUserServiceがある場合。 UserServiceのコンシューマーは、Swagger Codegenプラグインを使用して、ビルド時にUserクラスを自動生成できます。
Swagger Codengen mavenまたはgradleプラグインをかなり簡単に使用できます。