订单和订单明细继承等级结构简单介绍

本文介绍了一种订单管理系统的设计模式,通过订单继承等级结构和逻辑分离的方法实现订单与业务逻辑的解耦。具体包括订单的基本结构、订单逻辑处理接口 ILogic 的定义及其实现方式,并探讨了订单明细的处理策略。

一,概述

在现在的管理软件中,一般都会涉及到订单的管理,比如采购订单,采购进货单,销售订单,销售退货订单,库存变动单,采购付款单等等。在这些订单中,都会存在共同的信息。现在就介绍一下一个订单继承等级结构,对订单的业务处理。和对订单明细的库存和业务的处理方法

 

二订单继承订单结构

上图就是一个订单的继承等级结构,订单最上级是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;

这样的好处,就不必多言.

 

四,总结

对于订单和订单明细结构的分析,发现他们都将变化的逻辑交给其他对象处理,只负责单一的责任,这就是面向对象的单一职责原则,这样做的好处是对于以后的扩展和维护都有很大的好处.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tof21

支持原创

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值