iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
Software Development

From State Machine to XState系列 第 14

Day14 - 解決狀態大爆炸 - 2: Hierarchical States (階層式狀態)

  • 分享至 

  • xImage
  •  

同樣的例子。
假設這次我希望某些狀態是依賴於某些狀態的!

比如說有輸入有效(valid)跟輸入無效(invalid),是依賴於 input 是否改動過(changed)
改了才知道,輸入有效 or 輸入無效

所以我們終於可以移除昨天不合理的假設,輸入有效、無效在 unchanged 時,是不合理的,在 changed 之後,這個 changed 才有需要代表鑑別 valid / invalid,我們可以說 valid / invalid 這兩個子狀態依賴於 changed 之下。
valid / invalid 無法透過完整透過自己,代表整個狀態的全貌。(或者可以說,我們在 unchanged 時,不在意是否 valid )

https://ithelp.ithome.com.tw/upload/images/20210929/20130721UvlbWhoZpj.png

跟平行式狀態的狀態、事件一樣,一樣是 3 組子狀態 6 種事件。

只不過這次我們帶入了嚴謹的依賴性進來我們的狀態機。

也就是說,當處在某個狀態時,另一些狀態的存在才是有意義的、合理的時。我們可以藉由階層的概念、手段,來描述我們的狀態機,也可以讓我們免除 state 大爆炸的情形。

小節

  1. 使我們能提煉、精緻狀態,將離散的行為拆分成獨立的子狀態機
  2. 可以將 相似的 transition 分群
  3. 允許狀態間的獨立性 (反言之,轉移禁止跨越子狀態機之間)
  4. 鼓勵組合、組裝(Composability)
  5. 避免狀態大爆炸 ^^
  6. 透過拆分、組裝狀態,我們可以將狀態分群,每個區塊有屬於自己的狀態機。當轉移到某個 Sate 後,可以進入對應區域的子狀態機,使我們的狀態機更具描述性。

參考資料

https://statecharts.dev/state-machine-state-explosion.html
https://xstate.js.org/docs/guides/hierarchical.html


上一篇
Day13 - 解決狀態大爆炸 - 1: Parallel States (平行式狀態)
下一篇
Day15 - 守護你的狀態轉移 : Guard
系列文
From State Machine to XState31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
TD
iT邦新手 4 級 ‧ 2021-10-01 08:35:03

終於看到當初提到狀態大爆炸的解法了!

Ken Chen iT邦新手 4 級 ‧ 2021-10-04 00:44:50 檢舉

/images/emoticon/emoticon37.gif

我要留言

立即登入留言