接了个大活,要把公司内部好几条业务线的订单系统统一抽取出来,做成一个订单平台,支撑目前多条业务线的订单体系,同时也要求可以灵活扩展,快速支持之后的新业务。
谈到订单,基本上是大部分公司业务系统中没办法绕过的一环,而订单最关键的是什么?个人认为是其生命周期,其中订单的状态变更 更是需要仔细设计、考虑的点。如果对于单一稳定的业务,不太建议使用状态机来实现,引入了不少复杂度。但是如果业务经常变化,业务模式又多种多样,那么前期引入状态机引擎就太值得了,好的设计可以避免后期很多工作量产生。
关于状态机引擎的选型,其实目前市面上有不少框架,github上按照statemachine关键字搜索可以出来好多结果。考虑到资料完备情况、与项目的集成容易程度、框架是否尚在维护等条件,这里选择spring statemachine。其实在segmengfault中有一篇文章在推荐squirrel,只是目前spring statemachine已经又进一步完善,足以满足我的需要,而且在引擎实例持久化方面更是提供了比较完备的解决方案,所以还是继续选择spring家族的产品。这篇比较的文章参见:https://segmentfault.com/a/1190000009906317
看spring的产品,首先看其quickstart项目,然后根据reference做字典式学习,
- 官网:http://projects.spring.io/spring-statemachine
- 对应的reference:https://docs.spring.io/spring-statemachine/docs/1.2.8.RELEASE/reference/htmlsingle
- 以及对应的源码 & samples:https://github.com/spring-projects/spring-statemachine
另外,目前网上基本上所有的spring statemachine教程都是脱胎于官网的简单教程及@翟永超 的一篇博文(http://blog.didispace.com/spring-statemachine/),而且无一例外都是基于spring boot的。对我目前的项目来说确实并不是太适用,所以以下内容是基于普通spring + spring statemachine进行实现的,并未引入spring boot,介意的可以节省点时间,不用继续看下去了,生命苦短,没必要浪费哈!
网友评论