私がコンサルティングしているビジネスをサポートする一連のサービスの SOA アーキテクチャを検討しています。以前は、各アプリケーションが共有 MS SQL データベースから必要なものを選択し、それを操作するデータベース統合を使用していました。 Java、.net、Microsoft Access などのモンスター データベースと統合するアプリでは、すべてが密結合されているため、参照整合性がありました。
サービス間のデータ共有をサポートする方法について少し混乱しています。
卸売業者が毎月提供する製品データベースの上にある製品サービスを見てみましょう。ドメイン モデルを構築し、これを Hibernate などを使用してデータベースに配置します。実装に関して言えば、製品は、製品について卸売業者から提供された情報を考慮した大きなオブジェクト グラフです。
ここで、Review サービス、Pricing Service、Shipping Service、および Stock Service が ProductUpdated、ProductAdded、ProductDeleted をサブスクライブするとします。問題は、各サービスが製品に関する情報の一部または一部しか必要としないことです。配送には、寸法と重量のみが必要な場合があります。価格設定には、製品 ID、卸売コスト、ボリューム ディスカウント、現在まで有効な価格のみが必要な場合があります。レビューには、製品 ID、製品名、生産者が必要な場合があります。
製品全体 (ProductUpdated などの適切な非サブスクライバー固有のコントラクト、およびすべての製品オブジェクト グラフを表す適切なスキーマ) を公開し、サブスクライバーに必要なものをドメイン モデルにマップさせる (または、彼らが何をするか) だけが標準的な方法ですか?ドメインモデルさえないかもしれません)...
または、これを書いているときに、おそらく次のように考えています。
Product Service は ProductAdded メッセージを発行します (製品の ID とおそらくタイムスタンプだけの製品の詳細は含まれません)
Pricing Service は ProductAdded をサブスクライブし、RequestPricingForProduct メッセージを発行します
製品サービスは ResultForPricingForProduct メッセージを公開します
うーん..少し良くなったように見えます...しかし、私が識別できる他のサービスとそれらが必要とするものに基づいて、製品サービスの契約を構築しているように感じます.おそらく将来、XYZサービスは何か違うものを必要とします. 私が混乱している場所がより明確になってきていると思うので、そこで停止します...おそらく、公開すべきものは何でも返す方法を公開する必要があるため、上記は機能します。
コメントや指示は大歓迎です。これが中途半端に見えたらごめんなさい。