bjuppa / eloquent-state-machine
Laravel Eloquent 模型的有限状态机
v0.1.0
2023-08-31 06:33 UTC
Requires
- illuminate/database: ^8.0 || ^9.0 || ^10.0
- illuminate/support: ^8.0 || ^9.0 || ^10.0
Requires (Dev)
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.0
README
此包允许您将 Laravel Eloquent 模型及其关系视为 扩展状态 在 分层状态机 中的状态。
将此包与其他大多数状态机实现区分开来的哲学是,行为在代表 状态 和 事件 的类中 在代码 中声明,而 模型 本身决定了当前状态。没有对状态机 图 的整体配置。当前状态处理传入的事件并将模型 转换 到另一个状态。
- 每个状态和事件都由一个 PHP 类表示,该类扩展了一个相关的基类。
- 状态声明它所属的 超状态 (复合 或 根)。
- 事件被派发到模型的当前状态。
- 事件处理在数据库事务中进行,并使用悲观行锁。
- 当前状态评估传入的事件(守卫),并可能启动到另一个(命名)状态的 转换。
- 当前状态未明确处理的事件将向上冒泡状态分支。
- 状态有 进入 和 退出 动作,事件有在转换期间操作模型的 动作。
- 副作用可以延迟到转换完成后进行处理。
- 转换期间的任何异常都会抛出异常,触发事务回滚。
项目状态
我,Björn Nilsved,于2020年创建了此包,用于一个自2021年以来一直处于生产状态的应用程序。状态机功能的发展过程相当是探索性的,并且专注于该特定应用程序的需求。由于状态机 API、基类等变化很大,我在应用程序本身中编写了特定的测试,并且在结构稳定之前推迟编写包的通用测试。当然,一旦 API 稳定并且应用程序部署,我就从未着手编写那些测试或按计划编写包的文档...
对我来说,这种情况很好,我对应用程序的测试套件有信心。如果其他人对此包感兴趣,我愿意付出努力来为稳定版 1.0
的发布设置适当的测试和文档。如果您希望看到这种情况发生,请 联系我!
需求
行级锁定仅在 MySQL / MariaDB 和 PostgreSQL 中受支持。
安装
您可以通过 composer 安装此包
composer require bjuppa/eloquent-state-machine
用法
首先为您的状态机绘制一个 状态图,没有它,您可能会错过某些状态、转换、事件或动作。
与图中特定状态相关的一切 都直接编码到该状态的 PHP 类的独立方法中。
安全
如果您发现任何与安全相关的问题,请通过电子邮件 nilsved@gmail.com 而不是使用问题跟踪器。
鸣谢
许可协议
MIT 许可协议(MIT)。请参阅 许可文件 以获取更多信息。