Day11 - 状态机与现实世界的落差 - 1: Action? Side Effect

既然我们已经理解、实作完基本的状态机了,我们今天来多看看一些状态图,并且思索在现实世界中,我们还缺少甚麽东西,首先我们从简单的开始,慢慢往下进行。

https://ithelp.ithome.com.tw/upload/images/20210926/20130721htU67KKipL.png

1.门阀开关:

主体是:门

需要有什麽状态:「开了」跟「关着」

需要有什麽事件:「开门」跟「关门」

转换的条件是什麽:state 「开了」+ event 「关门」可以转换到 state「关着」

转换的条件是什麽:state 「关着」+ event 「开门」可以转换到 state「开了」

初始状态是什麽:我选择关着

const machineDef = {
  initialState: "closed",
  states: {
    "closed": {
      on: {
        open: "opened",
      },
    },
    "opened": {
      on: {
        close: "closed",
      },
    },
  },
};
const doorMachine = createMachine(machineDef)

https://ithelp.ithome.com.tw/upload/images/20210926/201307213gH8P957Es.png

让我们思考一下现在缺少什麽?

我们的状态机的确可以执行了,但这个状态的转移还没办法跟我的系统做良好的绑定;也就是说,字面上状态的确是移动 「开了」、「关着」的状态,但没有人(没有程序码)实际去执行『开门』、『关门』的动作(Action),也就是什麽事发生了要做什麽,听起来有点绕口令...

开门的事件发生时,要去进行「开门」的「动作(Action)」。

这个动作也就是我们说的 side effects,负责去做状态机以外的事情,比如操控 I/O、API call,之类的。

以开、关门而言,「开门」这个「动作」的执行,不存在我们昨天实作完的状态机内,状态机只负责记忆状态和状态的转移。

也就是说 Action,这个不存在程序码内的实作、这个缺少的东西,在现实世界当中,有其存在的必要性,我们先记起来,明天我们接着去看其他的状态图及现实世界的互动。


<<:  [C 语言笔记--Day15] 如何清空终端机

>>:  [Day11] [笔记]React Hooks - UseRef

我朋友最近跟我阐述了一个惨痛的系统购买经验(一)

我朋友最近跟我阐述了一个惨痛的系统购买经验,我觉得很有价值,特以第一人称观点描述记录下来,本故事内容...

[DAY-08] 增进诚实敢言 把一切摊在阳光下

人们如果主动隐瞒某些事 反而会花两倍时间想着那着些事 秘密的问题在於 只要你说出来 他就不再是秘密...

免费使用宝塔插件

当前宝塔版本 7.7.0 可用,第三方插件提示“文件hash校验失败”无法安装暂未解决,还有偶发性失...

从 DevOps 兽进化成 DevSecOps 兽:Kube-bench 跟 Falco 浅谈

最近浏览了一下其他先进的文章,发现大家都很有梗耶,今天标题来致敬一下这位大大:Docker兽 究极进...

[Day13] Node.js & NPM

从头到尾硬干一个网站是非常费功费时的事情,为了节省开发时间就会尽量引用现成的套件,随着引用的套件越来...