更新:
状态模式可能是解决此问题的错误方法。因此,欢迎任何其他模式。基本上,我正在寻找一种方法来为每个状态设置保护条件,同时拥有干净且可维护的代码。如果不满足条件,前端路由系统(如 emberjs、ui-router 和 react-router)将如何实现guard conditions
以避免进入特定状态?
我想通过使用状态模式来实现一个有限状态机,但我无法理解它。简而言之,它就像:
If error -> error state
If A && B && C -> second state
If only A -> first state
在任何状态下,一旦出错,我们就会进入错误状态。输入(事件)A、B 和 C 可能以任何顺序到达,但如果它们都通过,我们将进入第二状态。如果只有输入 A 适用,那么我们进入第一个状态。
以下状态图取自 Martin Fowler 的领域特定语言一书。
在描述中他说:
格兰特小姐,在她的卧室里有一个秘密隔间,通常是上锁和隐藏的。要打开它,她必须先关上门,然后打开她胸前的第二个抽屉,然后按任意顺序打开床头灯。一旦完成这些,秘密面板就会解锁,让她打开。
我强调,这turning light
可以opening 2nd drawer
按任何顺序发生。与 A、B、C 相同。
根据@SQLPolice 评论和书,我画了这个:
但问题是,我可能有(A && B && C && D && D && E)。在那种情况下,拥有所有组合的临时状态会很麻烦。