幸福一箩筐|领域驱动设计框架Axon实践( 二 )
项目1.0版本采用的是Activiti工作流作为引擎设计实现的 , 基于Activiti特性 , 可以严格控制每一步状态的流转 , 历史操作事件都会记录到系统数据库中 , 对于线上问题排查有一定的优势 。 但是学习成本较大 , 需要开发人员了解框架系统的二十多张表功能、使用BMPN进行流程定义设计等 。 图5是最初版本的流程设计图:
图5
随着业务的发展 , 想要修改流程设计 , 增加一些新状态 , 此时Activiti的弊端更加暴露出来:如果在原有流程上修改 , 对于历史数据的显示会报错 , 如果新增流程 , 对于正在流程中的数据又没法使用新流程 , 只能终止掉重新发起 。 Activiti针对这种流程升级 , 或者中国特色式的工作流一直没有很好的解决办法 , 网上的一些解决方法较为复杂 , 涉及到修改系统内置数据库 , 实现起来成本较大 。 针对这种情况 , 爱奇艺号开发团队对系统进行了升级 , 采用Axon+Spring StateMachine相结合进行项目架构设计 , 实现了合同系统2.0版本 , 最终呈现的结果如图6:
图6
架构说明如下:
- 用户接口层:主要是MQ消息、UI和API接口 , 接收用户请求、运营审批命令、第三方系统交互通知等;
- 应用层:接口参数校验、组装业务参数 , 转换成Axon Command进行命令分发;
- 领域层:接收到领域事件 , 转换成状态机Event , 驱动状态机进行状态更迭 , 触发对应业务逻辑处理;
- 基础服务层:提供底层存储服务 , 第三方服务等 。
图7
Axon+StateMachine结合 , 实现简版工作流引擎功能 , 相比于Activiti更加轻量级 。 以合同对象多为领域对象 , 系统操作命令使用状态机进行控制流转 。 所有对系统的修改操作均以Axon的Command进行 , Axon会记录所有对领域对象操作过的事件 , 可以还原合同生命周期内每一步的状态 , 对于问题排查 , 统计分析有着很大的帮助;Snapshot机制对事件进行预热 , 解决事件过多加载慢的问题;sage对系统失败操作进行补偿事件 , 保证系统间数据状态的一致性;StateMachine特性 , 可以修改状态之间流转走向及流转条件 , 新增状态对于历史数据或者进行中的数据没有影响 , 对系统的迭代开发有很大的效率提升 , 天然适合互联网性质工作流 。
价值通过在爱奇艺号后端服务应用Axon框架 , 可以达成以下效果:
开发方面的优势
- 转换思维:Java语言开发一直提倡面向对象开发 , 但是很多业务开发人员的思维还是面向过程开发的思维 , 按照MVC分层进行业务代码的堆叠 。 Axon思维更倾向于面向对象 , 以领域对象为核心 , 由于领域对象有明确的领域边界 , 所以容易促进开发人员思维模式的转变 。
- 提升开发效率:项目基于命令模型开发 , 可以让熟悉业务的开发人员专注于领域层开发 , 接口和应用层开发则可以由对业务比较陌生的开发人员负责 , 二者通过命令发送消息机制进行通信 。 这种职责分离的优势在于不需要所有的开发人员都对业务非常熟悉 , 减少了熟悉具体业务的时间 , 且每个开发人员都职责明确 , 可显著提升开发效率 。
- 便于问题排查:事件溯源机制使得领域对象的每次操作变更状态都有记录 , 对于排查线上问题有很大的帮助 , 可以按照先后顺序还原对象的每一步状态 。 snapshot机制有很好的解决了ES事件预热的问题 。 对于BI的分析也有着更好的支撑 。
推荐阅读
- 笙笙千离|惠若琪李宇春同框颁奖,春春身高176还自卑,巨人身高收获幸福
- 资讯早知道|9年后再看《步步惊心》,发现若曦无论跟谁都不会幸福
- 东方网|钜成集团与中国国际能源集团签约 将在5G通信、芯片等领域全方位战略合作
- 弹钢琴|原创吉娜为1岁宠物兔庆生,郎朗弹钢琴助兴,幸福温馨像一家三口
- 人民日报|岳阳君山区:消费扶贫托起贫困户稳稳的幸福
- “全国人大 ”微信公众号|何健忠:以实施民法典提升人民美好生活的“幸福指数”
- 经济日报-中国经济网|【幸福花开新边疆】219国道旁的“脱贫事”
- 新华网|【幸福花开新边疆】奋发学技能 靠己奔小康
- 【幸福花开新边疆】奋发学技能 靠己奔小康
- 【幸福花开新边疆】219国道旁的“脱贫事”