我正在尝试为我的iOS项目构建DSL。
为此,我计划以Semantic Model
的形式构建State Machine
。 (术语来自Fowler关于DSL的书)。
主要思想:State Machine
被编码为它们之间的states
和transitions
的集合,然后可以编写一些单元测试来检查{{1}上的some_action
}将系统引导至some_state1
。
问题是我的应用程序有很多后台线程,因此在给定的时刻,状态机中可以激活多个状态。
我已经读过,这样的状态机是some_state2
,浏览了Wiki页面,但这对我来说太理论化了。
这是一个示例状态机:
Nondeterministic finite automaton
仅在收到s8
和t7
时才能被激活,这意味着它应该“等待”。
问题:
1.状态机中是否有类似t8
的东西?
2.也许这不是NFA,而是两个状态机?我是否应该完全在乎如何命名这种语义模型?
3.是否可以通过一些后台线程来实现"wait"
,该线程可以接受来自s8
和s4
的通知,并且仅当它们两个都发送了通知时才被激活(这意味着该单元到达超时时测试失败,然后在模型中的某个地方提及该超时)?
答案 0 :(得分:1)
看看分层状态机中的orthogonal regions,这应该可以满足您的需求。
创建一个具有两个子区域的新状态:第一个包含s1,s2,s3,s4的区域和一个新的最终状态(t8的目标);第二个区域包含s5,s6,s7和新的最终状态(t7的目标)。然后添加一个从新状态到s8的新过渡。
仅当两个区域都处于最终状态时,才遍历新的过渡。