比方說,我們有一個電子商務系統,它有兩個獨立的系統:庫存管理系統(IMS)和訂單管理系統(OMS)。假設IMS提供圍繞庫存的信息(getItem,getItemQuantities等),並且OMS提供訂購服務(startOrder,addItemToOrder,finalizeOrder等)(網絡)服務依賴關係問題
這兩個系統實現爲使用不同後端的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)
}
您可以輕鬆地找出一個簡單的數據庫表結構來實現上述。
作爲一個用例,考慮一個客戶端將一個項目添加到訂單中。此請求需要OMS進行多個服務/數據庫調用:
- 驗證orderId(可選,可將此責任傳遞給數據庫)。
- 呼叫到IMS,以驗證傳入的itemId存在(必填由於DIFF DB)
- 呼叫到IMS,以驗證庫存對傳入的數量(由於requred把分差DB)
- 插入新記錄插入到表(必填)
從性能的角度來看,這是否有意義?你能想出更好的方法嗎?
[編輯]:作爲後續,在用戶請求OMS訂單細節的情況下,只能返回訂單ID,並且每個含有的itemId,數量和小計orderLineItems的列表。客戶實際上也希望項目的名稱和描述。是通過IMS向客戶撤回名稱/描述還是由OMS負責?
這個問題表明這兩個系統是分開的。此外,使用存儲過程通過在數據庫層引入緊耦合來打破SOA的主要目標(儘管這不是問題中提到的問題)。 – 2009-09-11 01:00:55
我用一個存儲過程作爲如何在低級別實現數據層的例子,來反擊關於需要多個數據庫操作的建議。 – 2009-09-11 03:11:53