我一直在研究Spring State Machine和State 设计模式,因为我必须使用 Spring Boot 开发一个微服务,并且持久化具有许多需要清理的混乱状态的对象,我正在寻找一个干净的设计解决方案混乱。我检查了 DDD、状态概念和状态机,看看要应用哪些
我不确定如何实现一些概念,以及如何连接它们。我想了解是否:
- Spring State Machine 可以在转换期间对实体工作,还是只能在全局应用程序状态级别上工作?
- 要管理多个实体,每个实体都处于自己的状态,是否必须将其创建为原型范围的组件?
- 它是否容易与状态模式集成,还是不应该一起使用?
- 为了管理这个,我应该将状态或状态机注入实体(可行,我知道,但我不喜欢使用 @Configurable 和适当的 AspectJ 编织配置的想法)?我分享某人的印象,它可以使它更复杂,也许我不得不使用
@Scope("prototype")
- 相反,如果有可能让域服务在每个实体的基础上委托状态机(因此另一个域服务)以供单个实体更改状态?或者这是贫血的领域反模式,但如果是这样,状态机与 DDD 的集成效果如何?
- 有没有关于 Spring State Machine 如何让我做我想做的事情的例子,它有多轻量级,以及它有多慢和消耗内存?
我明白了:-DDD 想要具有比简单数据对象更多功能的域对象,就像这篇关于 DDD的非常完整但有点过时的文章一样- 状态模式应该封装上下文元素在特定情况下的行为方式 - 状态机是关于封装对一个状态和另一个状态之间的通道的管理 - 如果它们一起工作,状态不应该在特定命令上规定哪个是下一个状态,而是为状态机生成一个事件,状态机将选择(或阻止如果有失败的守卫)新状态 - 状态机必须以某种方式在上下文中设置新状态
通常 Context 对象应该直接委托给 State 对象。但是由于状态机决定了对象状态的变化,在这种情况下,上下文不应该委托给某种代理状态吗?应该将状态机注入实体还是代理?
非常感谢您对其中一些问题的任何想法、建议,甚至部分答案。
顺便说一句,我只是