Java 域对象和基础结构依赖关系

Java 域对象和基础结构依赖关系,java,spring,design-patterns,domain-driven-design,Java,Spring,Design Patterns,Domain Driven Design,我们有一个域对象(比如平面)和业务流(状态机对象)。在事件(失败)中,我们希望将状态从飞行更改为下降。不知道什么是最好的建模方法。 我不想让方法plane.setState(),因为它应该是平面的内部状态 另一种选择是使用springs@Configurable将stateMachine注入到平面中,并创建方法plane.failure(),但它需要一个jvm代理,并且可能无法很好地与eclipse和单元测试配合使用 第三种选择是使方法平面化。失败(状态机)看起来很难看,但似乎有效 还有其他想法

我们有一个域对象(比如平面)和业务流(状态机对象)。在事件(失败)中,我们希望将状态从飞行更改为下降。不知道什么是最好的建模方法。 我不想让方法
plane.setState()
,因为它应该是平面的内部状态

另一种选择是使用springs@Configurable将stateMachine注入到平面中,并创建方法
plane.failure()
,但它需要一个jvm代理,并且可能无法很好地与eclipse和单元测试配合使用

第三种选择是使方法
平面化。失败(状态机)
看起来很难看,但似乎有效


还有其他想法吗?

如果您不想通过
setState()
方法将对象的
状态
暴露在外部,那么您需要以某种方式通过
事件发生(事件)
方法将
事件
传达给它。从那时起,对象的内部事务就是根据发生的事件设置自己的状态。状态和事件都是某种枚举,状态枚举在域对象中内部定义。我甚至会考虑在中间抽象类中提取状态枚举逻辑和转换。

为什么不显式,并且执行<代码>平面。如果我手动执行,我将得到数千条“如果”语句。我想使用这个工具,让我创建一个工作流声明。那么有不同类型的失败吗?是的,这是一个典型的状态机。当状态为飞行时,故障会将状态更改为下降。当状态为“准备启动”时,故障状态将更改为“需要立即检查”。当国家被“废弃”时,失败就没有商业意义。当然,“失败”不是唯一的事件,还有其他事件:“‘起飞’、‘启动引擎’等。如果您用来提供状态机的工具可以被视为域服务,那么第三个选项就完全可以了。另一种方法是简单地将状态机建模为平面实体内的值对象。