业务驱动 状态机
业务驱动 状态机
描述
通过有限状态机(FSM)实现业务的驱动,状态机通过操作驱动(即事件驱动ED)触发
状态机可充分利用管理PipeLine模式,让业务核心程序解耦
使用场景
- 订单模型/领域
- Redis请求队列
状态机业务驱动图
类图分析:
State: 状态实体类,表示一个状态以及关联操作、操作后的新状态定义,通过State类以及配置化到相关配置文件,可以实现业务一定程度上的可配置化
StateConfigLoader: 状态机配置文件加载类
IFSM: 状态机接口
EDFSMManager: 事件驱动有限状态机实现类,时间状态的转化、执行
FSRequest: 请求参数类
FSResponse: 相应参数类
IFSMOperatorRouter: 操作路由接口
FSMOperatorRouter: 操作路由实现类
IFSMOperator: 操作接口,状态机通过当前接口驱动相关业务,相关业务类必须实现这个接口
接下来通过订单模型讲解状态机
详细讲解:
上游业务统一引入状态机驱动IFSM,根据类型统一由EDFS管理,管理分为(状态机生命周期、节点配置等),状态机根据类型把请求路由到操作者Opeartor,操作者会根据
状态机类型指向具体某个行为Opeartor,图中PipeContext 类似Spring的application上下文,里面有管道抽象接口的子类,每个业务模型对应一个Opera 操作者,Opera继承抽象父类,Logical对应领域对象处理,由此驱动整个业务流程
IPipeline: 订单处理非核心业务处理管道接口
PostPipeline: 订单处理非核心业务处理管道类, 对于订单处理中,将部分非核心业务处理,通过管道封装起来,然后和核心业务解耦,一方面提供核心订单业务的处理速度,同时通过补充的方式实现一个简单的、轻量级的分布式事务
IPipeValue: 管道操作类接口,任何要放入管道执行的类对象都必须实现这个接口
PipeContext: 管道上下文类
Logical 具体业务逻辑实现层
Redis请求队列
详细讲解
ProduceQueue 发送队列方法,定义接口统一被上层调用,充分利用Redis的阻塞队列模式,先进先出
ConsumeQueue 接受发送队列的消息,一条条获取成功后调用handle统一处理
EventHandle:抽象事件,定义执行方法和获取类型
Event:事件处理参数对象
Logical:领域模型
总结:
本文讲述事件驱动如何驱动业务链以及请求队列的使用方式,驱动等方式可以解耦业务和功能,充分利用设计模式、管道等特性。让编程变的简单化
请求队列可以用作消息事件、监听事件等
作者简介:张程 技术研究
更多文章请关注微信公众号:zachary分解狮 (frankly0423)