sou*_*ica 22
FSM是一种DSL,它允许您构建比使用核心actor API 更复杂,可读的状态机.您可以向业务人员显示FSM代码,他们可以验证业务规则.
在FSMDSL让你更清晰地撰写的东西放在一起.例如,转换允许您分解出必须在actor become行为中重复的逻辑.您还可以订阅其他演员以获得有关转换的通知,这有助于解耦和测试.
定时器也可以很好地集成到DSL中,并且可以干净地处理取消等操作.使用调度程序编码超时消息有许多问题.
不利的一面FSM是它是DSL和其他团队成员消化的新语法.好的一面是它是DSL和更高级别的抽象.我认为agilesteel的2个州的门槛很好.但是,一旦你过了2个州,其好处就会FSM非常引人注目.
一个注释:使用"弹出"行为unbecome- 默认行为是不使用行为堆叠.它仅与少数用例相关(即通常不是状态机).
agi*_*eel 14
与FSM相比,成为/不成为非常轻量级.因此,除非您有超过2个状态(例如开/关)和/或复杂的状态更改策略,否则我不会将"成为/不成功"转换为完整的FSM.除此之外,我认为只有很小的差异......比如FSMs给你一个不错的内置定时器DSL:
setTimer("TimerName", msg, 5 seconds, repeat = true)
// ...
cancelTimer("TimerName")
Run Code Online (Sandbox Code Playgroud)
或者例如,我不确定在FSM中是否可以"返回"前一个状态,只有"前进",因为您必须明确指定要去哪个状态.而恰恰相反unbecome.