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