朝練メモ

  • 一時変数の削除
    • totalAmount と freequentRenterPoints
    • 問い合わせによる一時変数の置き換え (120)
    • ループが増える
    • sequence 図の書き方面白い
    • ここではコード量が増加している
    • ループが 3 倍
    • プロファイリングしてみて性能計測
      • 見た目 (あるいは感触) で判断しない
    • リファクタリングのおかげでチューニングもし易く (問題箇所を特定し易く) なっている
      • ボトルネックな位置の判断がし易い
    • 計算メソドの切り出しで計算部分が再利用可能に
    • まだメソド抽出の候補あり
    • Template Method の形成 (345)
  • 料金計算の条件文をポリモーフィズム置き換え
    • 自分以外のオブジェクトの条件判定文の記述は間違い
      • getCharge() は Movie に異動
    • 貸しだし期間を引数で渡す必要がでてくる
      • Rental オブジェクトの属性
    • 何故 Movie で処理したか
      • 想定されている変更が映画の分類の追加のみ
      • 分類の変更による影響範囲を小さくすべき
      • 料金計算は Movie 自身に
    • Movie#getCharge() は Rental に異動
      • Rental#getCharge() 定義して _movie.getCharge
      • 当初、getCharge は Customer に書かれてた
    • 同じ質問に対して異なる答えかた
      • 継承でナニ
      • これで switch を多態性として表現できる
    • GoF の state パターン使う
    • State/Strategy によるタイプコードの置き換え (227)
      • タイプコードに依存した振舞いを State パターン使う形に
    • メソドの異動 (142)
      • switch 文を Price クラスに異動
    • ポリモーフィズムによる条件記述の置き換え (255)
      • switch 排除
    • 自己カプセル化フィールド (171)
      • getter/setter
    • ポリモーフィズムによる条件記述の置き換え
      • case のアクション部を取り出して云々
    • これ、実際なナニを確認した方が良い
      • しかも git で差分管理
    • Movie のコンストラクタで PriceCode の setter をナニしてる所が起点