9
Forde's Tenth Rule, or, "How I Learned to Stop Worrying and ❤️ the State Machine" (raganwald.com)
IngramChen 積分 6

會用 state machine 解問題的人真的很少,大概只有遊戲圈的人才會用。而且需要一段時間練習。

一個簡單的判斷法,如果你的 class 出現了三個以上的 boolean flag,然後有一些會衝突相依,那麼差不多可以試試用 state machine 來 refactor 了。

題外話,你知道 kaif web 的 up vote/down vote1 的三角型按鈕是用 state machine 做的嗎?

一對小小的三角型包含了六種 state :

  • WaitVoterState
  • WaitSignUpState
  • EmptyVoteState
  • UpVotedState
  • DownVotedState
  • VotingState

為什麼只是個 up/down vote 要搞到 state machine?沒辦法,一開始也沒用 state machine 解的,不過後來跑出來三、四個 boolean flag 後我就寫到抓狂了,一氣之下就 refactor 成這樣了

Kros 積分 0

可是我覺得用 state machine 寫,邏輯很分散耶,不好 trace code,還是我寫得不好?

IngramChen 積分 0 編輯於

state machine 只是個 pattern,實作方式有很多種。像這篇文章寫的方式 (純 OOP) 會很難 trace 嗎?

kaif 的按鈕用的是 event-based 的 state machine,這是特化過的,專門用在即時 event 的服務 (遊戲 or 聊天室)。而 event based 的架構本身就不好 trace,跟 state machine 其實沒什麼關係。

kaif 按鈕其實用不到 event-based 的設計的,只是我寫慣了才直接用。

spring 其實也有出 state machine1 ,可以看看他們的設計

haocheng 積分 0

上一次寫很多 state machine 程式好像是在 Gamelet 寫遊戲的時候,好懷念 XD

j0n 積分 1

其實像製程管理或是機台管理都蠻適合用 state machine 實作,目前什麼狀態,經過了哪個 action 變成了另一個狀態