Skip to content

关于

有限状态机是一种数学计算模型,它描述了在任何给定时间只能处于一种状态的系统的行为。形式上,有限状态机有五个部分:

  • 初始状态值 (initial state)
  • 有限的一组状态 (states)
  • 有限的一组事件 (events)
  • 由事件驱动的一组状态转移关系 (transitions)
  • 有限的一组最终状态 (final states)

状态是指由状态机建模的系统中某种有限的定性的"模式"或"状态",并不描述与该系统相关的所有(可能是无限的)数据。例如,水可以处于以下 4 种状态中的一种:冰、液体、气体或等离子体。然而,水的温度可以变化,所以其测量值是定量的和无限的。再比如管理TCP Socket连接时,其生命周期内存在明显的有限状态转换。

可能有相当多的同学在开发中没意识到有限状态机的作用,但是实际上,我们几乎无时不刻在有意无意间使用了有限状态机。当您在开发过程中能有意识地系统地进行有限状态分析并应用有限状态机,往往代表着您达到了较高的水平。

目前开源的有限状态机实现中比较知名的有:

  • xstate:堪称状态机航空母舰,功能太强大了,也太复杂了,学习成本非常高。
  • Javascript State Machine:功能较弱,在实际试用过程中发现在进行异步切换时存在问题。
  • jssm:特点是引入自己的DSL语法来描述状态机,使用起来比较别扭。

事实上,从功能完整度上看xstate是第一选择,但是其过于复杂了,在功能与易用平衡方面并不理想。

因此,我们开发了FlexState有限状态机,力求在功能性、易用性上达到平衡

FlexState是一款简单易用的有限状态机,具有以下特性:

  1. 支持基于Class构建有限状态机实例
  2. 支持状态enter/leave/resume/done钩子事件
  3. 状态切换完全支持异步操作
  4. 支持定义异步状态动作Action
  5. 支持状态切换生命周期事件订阅
  6. 支持错误处理和状态切换中止
  7. 基于TypeScript开发
  8. 支持子状态
  9. 核心代码90%+单元测试覆盖率

Released under the MIT License.