DSL / State Machine


ステートマシン

一言要約

内部の状態の変化によって異なるシステムのふるまいをモデル化するのがステートマシン

要約

仕組み

  • ステートマシンはよく使われるもので、形態もさまざまである。
  • ここでは、注文処理システムについて考える。
    • 最初は注文に対して商品の追加/削除ができるし、キャンセルもできる。
    • ある時点で支払いを行う。
    • 出荷されるまでは商品の追加/削除とキャンセルが可。
  • システムのふるまいに影響を与えるステートをマシンステートと呼ぶ。
  • ステートモデルを必ずしも実装に持ち込む必要はない。[強調要約者]
    • cancelはガード節だけでも実装できる。
  • マシンステートを表現するのは属性やそれ以外の手段でもできる。
  • ステートマシンの共通の特徴は以下の通り。
    • 複数のステートの概念を表現する。
    • ステート間の遷移を定義する。
    • 遷移はイベントによって引き起こされる。
  • (図の説明)
  • 現在の状態に対して定義されていないイベントに対しする処理
    • エラー
    • 無視
  • ガード遷移:条件に応じて遷移先が変わる。
  • ステートマシンにアクションが結びつくこともある。
    • 遷移が起きた時に実行
    • ある状態になった時/そこから変わる時に実行
  • ステートマシンの作り方に指針はないが、シンプルにしておけ。

例:秘密のパネルコントローラ

  • (省略)

ファウラーへのフィードバック

担当者のつぶやき

  • 内容的には普通にステートマシンの説明で特筆すべきところはないと思います。
  • ただ、"ステートマシンモデルを実装に持ち込む必要はない"とのことですが、Evansならこうは言わないでしょうね...

みんなの突っ込み