1.状态机

相较于传统的订单,方便维护与扩展。可读性提高

2.代码内容

class StatusMechain extends Controller
{
    const ORDER_STATUS_NEW = 'new';
    const ORDER_STATUS_PAYED = 'payed';
    const ORDER_STATUS_DELIVERY = 'delivery';
    const ORDER_STATUS_RECEIVED = 'received';
    const ORDER_STATUS_COMPLETE = 'complete';

    //单一入口,统一管理状态变更
    public static function changeStatus($status, $data){
        //在这里验证传进的参数,否则抛出异常
        //self::check($status,$data);验证参数比较复杂的时候可以把注释打开,用这个验证,在分发动作就不在验证参数
        return self::dispatch($status, $data);
    }
    //状态机分发处理
    private static function dispatch($status, $data){
        switch($status) {
            case self::ORDER_STATUS_NEW: $result = self::createNewOrder($data); break;
            case self::ORDER_STATUS_PAYED: $result = self::orderPayed($data); break;
            case self::ORDER_STATUS_DELIVERY: $result = self::orderDelivery($data); break;
            case self::ORDER_STATUS_RECEIVED: $result = self::orderReceived($data); break;
            case self::ORDER_STATUS_COMPLETE: $result = self::orderComplete($data); break;
            default: $result = false;
        }
        return $result;
    }

    private static function check($status,$data){
        switch ($status){
            case self::ORDER_STATUS_NEW: $result = self::createNewOrderCheck($data); break;
            case self::ORDER_STATUS_PAYED: $result = self::orderPayedCheck($data); break;
            case self::ORDER_STATUS_DELIVERY: $result = self::orderDeliveryCheck($data); break;
            case self::ORDER_STATUS_RECEIVED: $result = self::orderReceivedCheck($data); break;
            case self::ORDER_STATUS_COMPLETE: $result = self::orderCompleteCheck($data); break;
            default: $result = false;
        }
        return $result;
    }

    //各自功能实现,如果每个状态的
    private static function createNewOrder($data){
        //create new order
    }

    private static function orderPayed($data){
        //make the order payed
    }

    private static function orderDelivery($data){
        //make the order delivery
    }

    private static function orderReceived($data){
        //make the order reveived
    }

    private static function orderComplete($data){
        //make the order complete
    }

    private static function createNewOrderCheck($data){
        //create new order
    }

    private static function orderPayedCheck($data){
        //make the order payed
    }

    private static function orderDeliveryCheck($data){
        //make the order delivery
    }

    private static function orderReceivedCheck($data){
        //make the order reveived
    }

    private static function orderCompleteCheck($data){
        //make the order complete
    }
}