其他
状态机的通用设计和实现
点击上方☝SpringForAll社区 轻松关注!
本文来源:http://r6d.cn/bdm7i
讨论焦点:分析、设计状态机的极简思路和要点,不涵盖 BPM,也不涵盖 Activiti 类似的框架; 结果预期:一般场景下,能够快速、准确设计一个合适的状态机,平滑支撑业务\架构演进; 这篇分享,整理有 keynote
概要
几个朴素的问题:
状态机,是什么? 有什么价值? 具体业务场景中,如何设计一个合适的状态机? 怎么实现一个状态机?
实际上,作为架构师,面对一个具体场景,需要进行一系列的准备工作(前期的分析、设计)。
这些分析和设计工作,有几个重要产出:
业务子系统拆分(拆分预期) 服务化拆分边界(拆分预期) 领域模型 状态机
至于其他的分库分表、中间件引入等是业务发展到一定阶段的具体技术点,不是针对一个完整场景的架构设计,有缘分今后会细讲。
做一点分享,通过反复分析人月神话以及敏捷开发实践,时间的分配上,我的心理有个基本标准:设计、开发、测试,
3
+3
+3
目标
关于状态机的设计和实现:
基本规则 可行步骤 最佳实践 讨论
面向对象:
技术团队 产品团队 业务、技术感兴趣的同学
简介:状态机
基本原则:
状态互斥 严格流转
关键点:
状态: 暂态 终态 触发方式: 时间触发 事件触发
状态机设计的可行步骤:
分析:业务场景抽象,收集状态变更的条件筛选 设计:状态流转 实现
Note:
软件设计原则:SRP
实例
场景
实验平台的场景:
实验平台中,实验的状态流转。
目标:
怎么设计一个状态机,平滑的支持业务? 怎么实现?实现细节上,有没有问题?
分析
对象实体:实验
实体的状态
变更条件:
创建 生效:开始时间,实验自动生效 暂停:人为操作 恢复:人为操作 结束:结束实践,实验自动结束 上线:人为操作 删除:人为操作 实体,不同状态下的权限:
是否可编辑 是否可删除 etc.
设计
设计过程
状态:暂态、终态
实现
软件设计原则:
SRP
状态流转
触发方式: 时间触发: 定时任务
扫描事件触发: 事件入口
,按图索骥,做好控制
使用上面方式,一般几百行 java 代码,就能实现一个通用的状态流转,很简单清晰。
实现的部分细节:
状态是否实时变更
总结
基本原则:
状态互斥 严格流转
关键点:
状态:暂态、终态 触发方式:时间触发、事件触发
状态机设计的可行步骤:
分析:业务场景抽象,收集对象实体状态变更的条件筛选 对象 状态以及变更条件 不同状态下的操作权限 设计:状态流转 实现:软件设计原则,SRP
墙裂推荐
【深度】互联网技术人的社群,点击了解!
关注公众号,回复“spring”有惊喜!!!
如果资源对你有帮助的话