一,概述
在现在的管理软件中,一般都会涉及到订单的管理,比如采购订单,采购进货单,销售订单,销售退货订单,库存变动单,采购付款单等等。在这些订单中,都会存在共同的信息。现在就介绍一下一个订单继承等级结构,对订单的业务处理。和对订单明细的库存和业务的处理方法
二订单继承订单结构
上图就是一个订单的继承等级结构,订单最上级是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;
这样的好处,就不必多言.
四,总结
对于订单和订单明细结构的分析,发现他们都将变化的逻辑交给其他对象处理,只负责单一的责任,这就是面向对象的单一职责原则,这样做的好处是对于以后的扩展和维护都有很大的好处.