Rails gem AASM 狀態機

什麼是狀態機?

狀態機也可以稱作有限狀態機,是表示在有限制的狀態以及在這些狀態之間的轉移和動作等行為。簡單的來說,有限狀態機是由一組狀態一個起始狀態、 輸入、將輸入與現在狀態轉換為下一個狀態的轉換函數所組成。

狀態機間轉換

假設有簡單的一自動販賣機販售兩類商品,一類售價 20 元,另一類售價 50 元。如果該販賣機只能辨識 10 元及 50 元硬幣。一開始機器處於 Hello 的狀態,當投入 10 元時,機器會進入餘額不足的狀態,直到投入的金額大於 20 元為止。如果一次投入 50 元,則可以選擇所有的產品,否則就只能選擇 20 元的產品。完成選擇後,將會賣出商品並且找回剩餘的零錢,隨後,機器又將返回初始的狀態。其 FSM 如下:

販賣機的有線狀態機示意圖

為什麼要使用狀態機去設計狀態?

即使不使用狀態機,也是可以直接修改物件的狀態達到狀態轉換,但是狀態數量多的情況下有可能會產生錯誤,狀態機則會將各種狀態 (State) 整理好,透過事件 (Event) 描述狀態之間的過渡 (Transition) 方式,確保狀態轉換正確。

Rails gem AASM 使用說明

寫 rails 快樂之處就在於偉大的 gem,萬事萬物 Google 都可以找到好棒棒的 library ,例如: AASM。網路上已經有很多教學文章:
1. 高見龍:訂單處理
2. AASM Gem簡介
3. 狀態機初學到實作:認識 AASM

如果看完這些文章還有疑問都可以留言討論喔!如果喜歡文章也歡迎按讚分享~

Share on facebook
Facebook
Share on linkedin
LinkedIn
Share on twitter
Twitter

More to explorer

Close Menu