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