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