1.状态机

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

2.代码内容

复制代码
  1. class StatusMechain extends Controller
  2. {
  3. const ORDER_STATUS_NEW = 'new';
  4. const ORDER_STATUS_PAYED = 'payed';
  5. const ORDER_STATUS_DELIVERY = 'delivery';
  6. const ORDER_STATUS_RECEIVED = 'received';
  7. const ORDER_STATUS_COMPLETE = 'complete';
  8.  
  9. //单一入口,统一管理状态变更
  10. public static function changeStatus($status, $data){
  11. //在这里验证传进的参数,否则抛出异常
  12. //self::check($status,$data);验证参数比较复杂的时候可以把注释打开,用这个验证,在分发动作就不在验证参数
  13. return self::dispatch($status, $data);
  14. }
  15. //状态机分发处理
  16. private static function dispatch($status, $data){
  17. switch($status) {
  18. case self::ORDER_STATUS_NEW: $result = self::createNewOrder($data); break;
  19. case self::ORDER_STATUS_PAYED: $result = self::orderPayed($data); break;
  20. case self::ORDER_STATUS_DELIVERY: $result = self::orderDelivery($data); break;
  21. case self::ORDER_STATUS_RECEIVED: $result = self::orderReceived($data); break;
  22. case self::ORDER_STATUS_COMPLETE: $result = self::orderComplete($data); break;
  23. default: $result = false;
  24. }
  25. return $result;
  26. }
  27.  
  28. private static function check($status,$data){
  29. switch ($status){
  30. case self::ORDER_STATUS_NEW: $result = self::createNewOrderCheck($data); break;
  31. case self::ORDER_STATUS_PAYED: $result = self::orderPayedCheck($data); break;
  32. case self::ORDER_STATUS_DELIVERY: $result = self::orderDeliveryCheck($data); break;
  33. case self::ORDER_STATUS_RECEIVED: $result = self::orderReceivedCheck($data); break;
  34. case self::ORDER_STATUS_COMPLETE: $result = self::orderCompleteCheck($data); break;
  35. default: $result = false;
  36. }
  37. return $result;
  38. }
  39.  
  40. //各自功能实现,如果每个状态的
  41. private static function createNewOrder($data){
  42. //create new order
  43. }
  44.  
  45. private static function orderPayed($data){
  46. //make the order payed
  47. }
  48.  
  49. private static function orderDelivery($data){
  50. //make the order delivery
  51. }
  52.  
  53. private static function orderReceived($data){
  54. //make the order reveived
  55. }
  56.  
  57. private static function orderComplete($data){
  58. //make the order complete
  59. }
  60.  
  61. private static function createNewOrderCheck($data){
  62. //create new order
  63. }
  64.  
  65. private static function orderPayedCheck($data){
  66. //make the order payed
  67. }
  68.  
  69. private static function orderDeliveryCheck($data){
  70. //make the order delivery
  71. }
  72.  
  73. private static function orderReceivedCheck($data){
  74. //make the order reveived
  75. }
  76.  
  77. private static function orderCompleteCheck($data){
  78. //make the order complete
  79. }
  80. }