在我正在使用的 C# 解决方案中,应用程序逻辑的核心通过(非常好的)无状态库实现为状态机。业务逻辑的其他部分在许多其他类中建模,用于应用程序显示的不同区域和功能,但这是推动底层应用程序状态主要变化的部分。
尽管每个状态转换本身都非常简单(通知事件、设置 eventArgs、监听其他事件……)并且我在适用时使用子状态,但对我来说它开始看起来太大了。我知道这不是一个精确的衡量标准,但是如果您查看并考虑子状态,您最终可能会发现它们本身可能是不同的状态机。
是否有一种明显的方法可以让我用无状态构建单独的子状态机(可以这么说),将每个状态机映射到一个不同的类(和文件)?
我想到的第一个阻塞问题是(尤其是第二个):
一体式状态机触发所有状态更改的事件:拆分后,每个状态机将触发各自的触发器。所以最好有一个外观收集所有事件并为客户端重新触发它们,以便隐藏许多状态机(毕竟它们是客户端的实现细节)。
无状态子状态负责在状态/子状态链上以及向下的冒泡触发。因此,例如对于
A
具有子状态的给定状态,可以定义一个触发器(在一个地方A
的配置),它将使状态机离开A
,无论A
我们将处于哪个子状态。这如何与单独的子状态机一起工作?