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