由于系统在实际工作当中,系统有定时任务,及进入某种状态后,部分功能禁止使用。 因此为系统加入状态切换机制。
1) 问题是什么:
问题是如何保证系统在某些情况下,有些事必须执行,有些事可以执行,有些事禁止执行?
2)本质是什么:
定义清楚系统所处的状况(状态),每一个状态下所能执行的事件。状态直接转换的出发事件(条件)
3)在实现过程中,经历的1次重构:
(1):第一次实现:状态定义为(busy,idle,err)。 在执行某项任务前直接设置状态(setState);执行任中已该状态来屏蔽掉不能执行的任务;任务执行完后切换状态(setstate)。
存在的问题:第一次实现:存在以下问题:状态定义得不够,不能满足各场景需求; 为抓住状态3要义:前一状态,状态切换触发时间,新状态;状态切换过程不够独立。
(2): 第二次实现: 状态按照各业务场景细分为几十个状态(如INTOSHUTDOWNING_STATE,SHUTDOWN_STATE,INTOSLEPPING_STATE,SLEEP_STATE,EXITSLEEPSTATE 等),状态切换规则独立出来(接口传入前一状态,及状态触发事件,即可获取新状态--切换规则提取为配置文件);系统切换状态时,传状态触发事件transmint(event),状态切换模块会依据当前状态及触发事件类型,切换到新状态(如不满足切换规则,则切换不成功)。
本质上:状态本身是静态的,它代表了系统的一种重要属性; 状态触发事件代表的是(可能)重建新状态的基本条件;状态切换本事触发动态事件产生