状態設計
アプリケーションにおいて生じうる状態の設計
状態遷移
状態空間、状態の置き場所、状態の表現を意識する
状態空間
状態空間は以下の3つからなる
状態の集合
State (Reduxの例)
入力の集合
Action (Reduxの例)
入力の作用
Reducer (Reduxの例)
アノマリーがないように状態をつくる必要がある
到達不能アノマリー
余分な状態が存在する→消す
状態不足アノマリー
状態が足りない→足す
重複アノマリー
区別する必要がない状態がある→統合する
情報不足アノマリー
遷移先が決定できない→分割する
状態の置き場所
状態を保存する状態ストアは状態ツリーを形成する
https://gyazo.com/af38eac61f9d988d927fe8fa90f365c5
https://speakerdeck.com/qnighy/modelling-program-states-with-rationale?slide=31
原則
異なる状態ストアは異なるライフサイクルを持つ
ストア間の同期を信頼してはいけない
同期が取れていないときだけ出現する隠れ状態がありうる
隠れ状態は、複数ストアをアトミックに更新できない場合は到達可能なもの
状態の表現
「状態の集合」と「状態の表現の集合」は異なることがある
参考
状態設計から「なんとなく」を無くそう
決済ステータス定義の最適解