情景:
我有一个简单的状态机:
快乐路径:
Uninitialized->Initialized->InProgress->Done
路径不快:
Uninitialized->Initialized->Error
简单地说,我需要进行转换(进入InProgress或处于错误状态)没有外部事件/触发器。即初始化状态应立即导致其中一种状态。
问题:
答案 0 :(得分:2)
在状态机中,下一个状态是输入和当前状态的组合逻辑功能。
在您描述的情况下,相同的原因(Initialized
状态)似乎能够触发两种不同的效果(InProgress
或Error
状态)。我猜有一个隐藏的输入,其值有所不同。我还猜测在从Uninitialized
过渡到Initialized
期间会收到此输入。
因此我会有一个不同的模型:
Uninitialized -> Successfully initialized -> InProgress -> Done
\
`-> Failed Initialization -> Error
可能将Successfully initialized
与InProgress
和Failed initialization
与Error
合并。
编辑:从您的评论中,我了解隐藏的输入实际上是操作的结果(设备初始化)。采用您的模型,我假设初始化发生在Initialized
状态(让我们称之为Initializing
)。这样,设备的结果就是您的外部事件,它会触发转换为InProgress
或Error
。
因此请保留您的状态机,只需将device.Initialize()
的结果添加到输入或外部事件列表中。