一,概述
在现在的管理软件中,一般都会涉及到订单的管理,比如采购订单,采购进货单,销售订单,销售退货订单,库存变动单,采购付款单等等。在这些订单中,都会存在共同的信息。现在就介绍一下一个订单继承等级结构,对订单的业务处理。和对订单明细的库存和业务的处理方法
二订单继承订单结构
上图就是一个订单的继承等级结构,订单最上级是BasicOrder,基本订单下面有分为业务订单(采购单,销售单)和现在流订单(采购付款,其他收入)
1.订单中会涉及到相应的信息,比如金额,客户,优惠等等。
2.对于订单中的业务逻辑的处理,比如对订单中的明细进行编号排序,在保持完订单之后,需要刷新客户余额,或者在保存之前要做一些操作
在订单中,是将这些订单的业务逻辑交个ILogic的接口来处理的
BasicOrder中简单代码如下:
protected ILogic m_logic;
public ILogic getLogic() {
return m_logic;
}
public BasicOrder() {
super();
// 设置订单状态
if (getOrderState() == null) {
setOrderState(BasicOrder.ORDER_NORMAL_STATUS);
}
// 设置logic 对于不同的订单设置为不同的ILogic,比如采购单InboundLogic
m_logic = new BasicLogic(this);
}
3.ILogic继承等级结构
public interface ILogic {
/**
* function called by system before save an order
*
* @param params
* @return
*/
public boolean doBeforeSave(Map params);
/**
* function called by system before trash an order
*
* @param params
* @return
*/
public boolean doBeforeTrash(Map params);
/**
* function called by system after an order added
*
* @param params
* @return
*/
public boolean doAfterAddOrder(Map params);
/**
* function called by system after an order edited
*
* @param params
* @return
*/
public boolean doAfterEditOrder(Map params);
/**
* function called by system after an order saved.
*
* @param params
* @return
*/
public boolean doAfterSave(Map params);
/**
* stop the tracing of an order, such as purchase booking order etc.
*/
public void terminateOrderItems();
/**
* need to be called by before order saved to database. A lot of stuff is
* done here, for example ,find out those deleted order items, adjust order
* item's item number etc.
*
* @param itemsIn,
* need order item list, probably from store table.
*/
public void needCallBeforeSave(List itemsIn);
/**
* deletion list which contains deleted order items.
*
* @return
*/
public List getDeleteList();
/**
* clear deletion list which contains deleted order items.
*/
public void clearDeleteList();
/**
* some order may generate related accounting credence.
*
* @return
*/
public Credence getRelatedCredence();
/**
* get related order, some business order has related cash flow order.
*
* @return
*/
public BasicOrder getRelatedOrder();
/**
* clear up Credence and related order, after order saved.
*/
public void clearUp();
/**
* return payment logic, cash flow order will have it, some business order
* has it because it has related cash flow order.
*
* @return payment logic
*/
public IPaymentLogic getPaymentLogic();
}
上面的接口方法,见名知道意思,就是在保存之前,增加之前,删除之前对订单执行的操作。
以上是ILogic继承等级结构,BasciLogic包含基本的逻辑,CashflowLogic是现在流逻辑,RelateLogic是业务定逻辑.
将订单的逻辑交给ILogic处理,可以达到订单和业务逻辑的托偶,对于以后的修改,复用都用好处
二,订单明细的业务逻辑
1.订单明细一般会保存商品信息,然后加上订单的金额和订单号等信息
2.订单明细继承结构
3.首先BasicOrderItem继承了ProductAttribute(商品的信息)
4.对于订单明细都会涉及到库存,对管理软件了解的人,应该就比较清楚。订单明细把库存的生产同样交给一个借口去处理
// 代理类(代理businessMethod)
protected IOrderItemDelegator m_orderItemDelegator = null;
这样的好处,就不必多言.
四,总结
对于订单和订单明细结构的分析,发现他们都将变化的逻辑交给其他对象处理,只负责单一的责任,这就是面向对象的单一职责原则,这样做的好处是对于以后的扩展和维护都有很大的好处.