`
dcj3sjt126com
  • 浏览: 1871026 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PHP设计模式之状态机模式-实现业务流控制

    博客分类:
  • PHP
 
阅读更多

应用场景:在我们日常开发中经常会遇到各种状态的切换,例如电商系统的订单状态。如果我们将各种状态分散于各个地方,这样一来不利于管理,二来一旦出现问题很难查找原因和修复,并且往往很容易出现各式各样的bug,和控制的不严谨。 这个时候,我们就需要使用状态机模式来合理的控制订单状态的验证,处理和变更。 
示例环境:PHP框架YAF,实际可用于其他各种环境 

话不多说,首先我们直接上代码,来实现一个最简单的状态机模式:

 

class Order_OrderFlowService{
    //定义常量,订单的五种状态
    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){
        //do some validation before return
        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 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
    }

}

 首先我们定义五种订单状态的预设字段,用于方便使用。然后编写统一入口方法changeStatus。在这个方法里面,我们可以做一下统一的处理和权限验证,以上的示例中省略。统一入口调用分发机制匹配相应的方法来处理相应的工作。在这个地方,我们可以根据业务需要,扩大状态机方法的功能,可以在分发匹配的逻辑上对状态校验或者数据处理,也可以把校验放到具体的业务方法中。

 

 

相关资源:

http://lampblog.org/1817.html

http://yohan.giarel.li/Finite/

https://github.com/phwoolcon/fsm

https://github.com/winzou/state-machine

http://www.php.cn/linux-370234.html

分享到:
评论

相关推荐

    PHP网站开发项目式教程(微课版)-源代码.zip

    4. **MVC(Model-View-Controller)架构**:MVC是一种流行的设计模式,用于组织Web应用程序的代码结构。学习者将了解到如何分离业务逻辑(Model)、用户界面(View)和数据控制(Controller)。 5. **PHP框架基础**...

    基于PHP MySQL实现手机商城管理系统【优质毕业设计、课程设计项目】.zip

    3. **MVC(Model-View-Controller)模式**:此项目可能采用了MVC架构,这是一种常见的Web应用设计模式,将业务逻辑(Model)、用户界面(View)和数据控制(Controller)分离开来,提高了代码的可维护性和可扩展性。...

    软件设计-网上购物商城系统

    详细设计阶段会进一步细化每个功能模块的实现,包括接口设计、数据库表结构设计、类和对象的设计、数据流和控制流程设计等。例如: - 用户模块将涉及用户认证机制,如使用JWT进行身份验证;密码加密存储,确保信息...

    精品--Teaching interactive web platform - PHP教学互动平台构建(毕业设计项目).zip

    3. **MVC(Model-View-Controller)架构**:这是一种流行的设计模式,用于组织Web应用的代码结构。模型处理数据,视图显示数据,控制器协调二者,实现业务逻辑与界面的分离。 4. **前端技术**:HTML、CSS和...

    主机域名PHP域名代管系统-dmadmin

    在开发这样的系统时,开发人员会采用MVC(模型-视图-控制器)架构模式,以提高代码的可读性和可维护性。同时,数据库设计是关键,通常会使用MySQL或类似的RDBMS来存储域名信息、用户信息、订单数据等。 【主机域名]...

    PHP实例开发源码-php万品网免费开源OA系统.zip

    4. **工作流设计**:OA系统的核心在于工作流程的实现,这涉及状态机的设计和事件驱动编程。 5. **权限控制**:理解如何使用PHP实现用户角色、权限分配,以及如何通过ACL(访问控制列表)来限制不同用户的操作。 6....

    php源码OA办公系统源码含手机APP客户考勤管理系统.rar

    常见的开源工作流引擎有Activiti和Nodewebkit,它们可以集成到PHP系统中,实现复杂的业务流程自动化。 六、移动考勤管理 随着移动互联网的发展,手机APP成为OA系统不可或缺的一部分。系统可能使用Hybrid App技术...

    初阶PHP Apache MySQL网站设计(PDF)

    在实际项目中,你可能还会接触到MVC(Model-View-Controller)设计模式,这有助于分离业务逻辑、数据和用户界面,提高代码的可维护性和可扩展性。此外,了解一些流行的PHP框架,如Laravel或Symfony,可以加速开发...

    数据库课程设计--飞机机票订票管理系统

    **PHP+MySQL**结合是常见的Web开发模式,PHP作为服务器端脚本语言,负责处理HTTP请求,与数据库交互,执行业务逻辑,并生成动态网页内容。在机票订票系统中,PHP可以实现以下功能: 1. **用户注册与登录**:处理...

    PHP信息办公类网站实例开发源码——新思创OA3000办公自动化系统增强版.rar

    2. **MVC框架**:通常,PHP办公自动化系统会采用MVC(Model-View-Controller)设计模式,该模式将业务逻辑、数据处理和用户界面分离,便于代码的组织和维护。了解并运用MVC架构是理解此源码的关键。 3. **数据库...

    Laravel实现用户注册和登录

    Laravel是一个开源的PHP Web应用框架,它遵循MVC(Model-View-Controller)设计模式,以简洁优雅的语法和扩展性强而广受欢迎。本文主要介绍如何使用Laravel框架来实现用户注册和登录功能。为了完成这个任务,我们...

    基于PHP的响应式网站建设设计推广网站.zip

    4. **PHP的MVC模式**:Model-View-Controller(模型-视图-控制器)模式是一种常见的软件设计模式,在PHP中常用于Web开发。它将业务逻辑、数据处理和用户界面分离,使得代码更易于维护和扩展。 5. **数据库集成**:...

    PHP实例开发源码—9个主流影视站手机仿站源码分享.zip

    4. **MVC模式**:模型-视图-控制器(MVC)是一种常见的软件设计模式,在PHP web开发中广泛使用。源码中可能会展示如何组织代码以遵循MVC架构,例如,控制器负责处理用户请求,模型管理数据,而视图负责显示结果。 5...

    PHP音乐管理系统源码

    2. **MVC架构**:许多PHP音乐管理系统采用Model-View-Controller(模型-视图-控制器)设计模式,这有助于分离业务逻辑、数据处理和用户界面。理解MVC架构原理和如何在PHP中实现是必要的。 3. **数据库管理**:音乐...

    PHP实例开发源码—SHOPEX自助DIY装机插件.zip

    1. **MVC架构**:SHOPEX可能采用了Model-View-Controller(模型-视图-控制器)架构,这是一种常见的Web应用设计模式。模型负责数据处理,视图负责展示,控制器处理用户请求并协调模型和视图。 2. **类和对象**:在...

    PHP一元购系统

    1. 数据库设计:一元购系统需要一个完善的数据库结构来存储商品信息、用户数据、订单状态、开奖结果等。通常会包含商品表、用户表、订单表、中奖记录表等,确保数据的完整性和一致性。 2. 订单处理:系统需要能处理...

    thinkPHP1叫号系统(配有mysql数据库)

    1. **ThinkPHP框架**:ThinkPHP是中国最流行的PHP开发框架之一,它基于MVC(Model-View-Controller)设计模式,为开发者提供了一个快速、稳定、安全的开发环境。在本项目中,ThinkPHP作为基础架构,用于处理用户请求...

    PHP实例开发源码—ROCKOA协同办公OA php版.zip

    11. **任务和项目管理**:可能包括任务分配、进度跟踪、时间线展示等模块,需要理解工作流和状态机的概念。 通过深入研究这个源码,开发者不仅可以提升PHP编程技能,还能了解到协同办公系统的架构设计和实现策略,...

    工作日志,工作流程,工作记录管理系统,PHP

    例如,通过状态机设计模式,定义不同工作状态之间的转换规则;使用AJAX实现异步更新,提高用户体验;通过邮件通知功能,确保每个参与者及时获取任务信息。 工作记录管理系统则整合了工作日志和工作流程,它记录了...

    PHP双轨直销系统完整源码

    该系统适用于双轨制直销模式,即每个新加入的成员会分配到两个下线位置,形成类似树状的组织结构,这种模式在直销行业中广泛应用。 在技术栈方面,PHP是一种广泛使用的服务器端脚本语言,尤其适合开发Web应用。此...

Global site tag (gtag.js) - Google Analytics