比方说,我们有一个电子商务系统,它有两个独立的系统:库存管理系统(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