1. Solon状态机初体验:从零到一的实战指南
第一次听说Solon框架的状态机功能时,我正为一个电商订单系统复杂的流转逻辑头疼。传统的if-else代码已经堆成了"金字塔",新来的同事根本不敢动这块代码。直到尝试用Solon的状态机模块重构后,不仅代码量减少了60%,业务流程还变得一目了然。今天我就带大家用15分钟快速上手这个能显著提升业务代码可维护性的利器。
Solon作为一款轻量级Java框架,其状态机模块特别适合处理有明确状态流转的业务场景——比如订单状态(待支付/已支付/已发货)、审批流程(草稿/审批中/已通过)或者游戏角色状态(空闲/战斗/死亡)。与Spring StateMachine相比,Solon状态机的API更加简洁,学习曲线平缓,且能与Solon其他模块(如IoC、AOP)无缝集成。
实战建议:当你的业务中出现超过3个状态且流转规则复杂时,就该考虑引入状态机了。用状态机替换条件判断,就像用地铁线路图替代文字导航——前者让你一眼看清所有可能性。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 状态机核心概念与Solon实现解析
2.1 状态机的四大核心要素
在Solon中构建一个可用的状态机,需要明确定义以下要素:
-
状态(State):业务对象的生命周期阶段。例如订单状态可定义为:
java复制public enum OrderState { UNPAID, // 待支付 PAID, // 已支付 SHIPPED, // 已发货 COMPLETED, // 已完成 CANCELLED // 已取消 } -
事件(Event):触发状态变更的操作。对应枚举示例:
java复制public enum OrderEvent { PAY, // 支付操作 SHIP, // 发货操作 CONFIRM, // 确认收货 CANCEL // 取消订单 } -
流转(Transition):状态对事件的响应规则。Solon通过配置方式声明:
java复制StateMachine<OrderState, OrderEvent> machine = StateMachine.<OrderState, OrderEvent>builder() .transition() .from(OrderState.UNPAID).to(OrderState.PAID).on(OrderEvent.PAY) .transition() .from(OrderState.PAID).to(OrderState.SHIPPED).on(OrderEvent.SHIP) // 更多规则... .build(); -
动作(Action):状态变更前后执行的业务逻辑。Solon支持三种切入点:
onEnter:进入某状态时触发onExit:离开某状态时触发onTransition:状态转换时触发
2.2 Solon状态机的三种配置方式
根据业务复杂度,Solon提供不同层级的配置方案:
-
注解驱动式(适合简单场景):
java复制@StateMachine(states = OrderState.class, events = OrderEvent.class) public class OrderStateMachine { @OnTransition public void onPay(Transition<OrderState, OrderEvent> transition) { System.out.println("订单支付处理..."); } } -
Builder API式(推荐中等复杂度):
java复制
StateMachine<OrderState, OrderEvent> machine = StateMachine.builder() .initialState(OrderState.UNPAID) .transition() .from(OrderState.UNPAID).to(OrderState
