使用 C#状态机Stateless (c#状态条)
本文目录导航:
C#状态机Stateless 使用
探讨使用Stateless实现状态机状态机在控制系统状态切换方面展现出强大效用。
在没有使用状态机编程时,程序拓展性和调试性通常会受到影响。
相反,状态机通过定义状态与事件,自动完成状态间的切换,非常适合定义复杂控制流程。
Stateless是一个简易实现状态机与工作流的工具,广泛应用于项目中。
它提供多种特性,同时支持一些注意事项。
安装简单,通过Nuget即可完成。
Stateless使用流程包括定义状态与事件,创建状态机,配置状态迁移行为,以及外部调用。
过程简洁高效,只需触发事件,其余操作由系统自动处理。
总结而言,Stateless实现状态机具有事件驱动编程感,且本质不同。
尽管小巧方便,但它在某些方面仍有改进空间。
对比之下,提供了四种状态机实现方式,支持线程安全与状态、事件持久化,配置略有差异,但同样易于使用。
举例说明,以请假申请流程为例,使用Stateless可实现简单审批流程。
首先创建控制台项目,引入Stateless,编写代码。
流程包括三个状态和三个状态转换动作,通过Stateless模拟完成。
运行结果验证了流程的正确性。

HSM层次状态机
Hierarchical State Machine (HSM),简而言之,是一种层次结构的状态机模型,其特点是状态按照树状结构组织,形成层次分明的状态图。
相较于传统的平面状态模型,HSM在设计上更便于扩展和理解。
随着状态和转换的增加,平面模型可能会变得复杂难懂,而HSM通过分层处理,使得每个部分独立易解,特别适合描述对象、子系统和系统的生命周期过程。
层次状态机的优势在于其直观性和事件驱动的特性。
它能够清晰展示一个对象可能的所有状态,以及事件如何影响这些状态。
通过HSM,开发者可以明确对象在不同状态下的行为差异,以及事件触发的状态转换。
这种设计方法在软件开发中大有裨益,它利用了状态层次结构中的抽象和继承概念,降低了复杂性。
与经典状态机相比,HSM的一大创新在于引入了层次式状态。
这种状态嵌套的特点源于继承的概念,类似于面向对象编程中的类继承,但这里的继承是基于状态的行为而非类的is-a关系。
在HSM中,子状态可以从其父状态继承行为,这被称为行为继承。
这种机制使得处理复杂状态和行为变化时更为高效和直观。
HSM即Hierarchical Storage Management的简写,意为“分层存储管理”,指数据对象在存储设备之间自动迁移的过程,通常是被动进行的。
分层存储管理建立在性价比存储层次的概念之上,只要愿意降低访问性能,就可以更低的代价来存储。
单片机编程思想——状态机
单片机编程思想——状态机状态机(state machine)有5个要素:状态(state)、迁移(transition)、事件(event)、动作(action)、条件(guard)。
状态:一个系统在某一时刻所存在的稳定的工作情况。
迁移:系统从一个状态转移到另一个状态的过程称作迁移,迁移不是自动发生的,需要外界对系统施加影响。
事件:某一时刻发生的对系统有意义的事情。
动作:在状态机的迁移过程中,状态机会做出一些其它的行为,这些行为就是动作,动作是状态机对事件的响应。
条件:状态机对事件并不是有求必应的,有了事件,状态机还要满足一定的条件才能发生状态迁移。
状态机编程中,正确的顺序应该是先有状态转换图,后有程序,程序应该是根据设计好的状态图写出来的。
以按键控制流水灯状态转换图为例,用UML(统一建模语言)的语法元素画出,说明事件、条件和动作。
程序代码实现按键控制流水灯的状态转换,包含初始化、检测按键、状态机主循环和状态迁移逻辑。
状态机结构体变量包含u8LedStat和u8KeyCnt两个成员,u8LedStat表示状态,u8KeyCnt记录按键次数。
状态机可以用结构体变量实现,u8LedStat作为主变量,u8KeyCnt作为辅助变量,辅助变量的积累引发主变量的变化。
采用结构体变量的状态机被称为Extended State Machine。
通过状态机编程,可以清晰地定义系统的行为逻辑,简化程序代码,提高程序的可读性和可维护性。
在单片机编程中,状态机是一种有效且实用的编程思想。