State/Strattegyによるタイプコード置き換えを13年前に振り返る

replace typecode with state strategy

経緯

種別が混雑してきた

  • とあるPJで種別が煩雑になってきた

手順

状態オブジェクトクラス作成

タイプコードをカプセル化した状態オブジェクト作成

  • ステートパターン

    タイプコード毎に状態オブジェクトのサブクラスを作成

  • 各ステータスのクラス

タイプコードを取得するメソッド作成

  • GETステートの抽象化

サブクラスでは抽象メソッドをオーバイライドしてタイプコードを返す

  • GETステートの実装

状態オブジェクトの使用(タイプコードの参照側)

タイプコードの参照から状態オブジェクトのGetステート参照に置換

  • サブクラスのGetステートが呼ばれる

タイプコード変更を状態オブジェクトのチェンジメソッドに置換

  • 状態変更は直接させない