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
}
}
