たとえば、在庫管理システム (IMS) と注文管理システム (OMS) の 2 つの別個のシステムを備えた単純な e コマース システムがあるとします。IMS が在庫に関する情報 (getItem、getItemQuantities など) を提供し、OMS が注文サービス (startOrder、addItemToOrder、finalizeOrder など) を提供するとします。
これら 2 つのシステムは、異なるバックエンドを使用する Web サービスとして実装されます。OMS では、次のような単純化されたモデルを想定します。
public class Order {
private int orderId;
private List LineItem;
...
}
public class LineItem {
private int orderId;
private int itemId;
private int quantity;
private int subTotal;
....
}
IMS では、次のようなモデルを想定します。
public class Category {
private int catId;
private List Item;
...
}
public class Item {
private int itemId;
.... (other attributes)
}
上記を実装するための単純な db テーブル構造を簡単に理解できます。
1 つの使用例として、注文にアイテムを追加するクライアントを考えてみましょう。この要求では、OMS がいくつかのサービス/データベース呼び出しを行う必要があります。
- orderId の検証 (オプション、この責任をデータベースに渡すことができます)。
- 渡された itemId が存在することを検証するための IMS の呼び出し (diff DB のために必要)
- IMS を呼び出して、渡された数量に対して在庫を検証します (diff DB のために必要)
- テーブルへの新しいレコードの挿入 (必須)
これはパフォーマンスの観点から理にかなっていますか? もっと良い方法を考えられますか?
[編集]:フォローアップとして、ユーザーが OMS に注文の詳細を要求した場合、orderId と、それぞれ itemId、quantity、および subTotal を含む orderLineItems のリストのみを返すことができます。クライアントは、アイテムの名前と説明も実際に必要としています。(IMS を介して) クライアントに名前/説明を取得する責任はありますか、それとも OMS がこれを担当しますか?