これ僕.com:行動分析学マニアがおくる行動戦略

意図と行動のギャップから生じる「不自由さ」への挑戦。果たして僕たちに自由はあるのか?

プレファクタリング

プレファクタリング ―リファクタリング軽減のための新設計 (THEORY/IN/PRACTICE)

プレファクタリング ―リファクタリング軽減のための新設計 (THEORY/IN/PRACTICE)


リファクタリングの考えや手法を設計段階(それ以前も)から適用して、その後のリファクタリング効率をあげましょう、という話と理解。
そのための指針がちりばめられている本です。
以下、備忘録として抜粋。いつか自分の言葉として語れるようになりたい。

わざわざ1から作り直さない
新しい解決策を作成する前に、問題に対する既存の解決策を探します。
全体像を考える
システムにおける判断は、全体像と合致すべきです。
大局的に計画し、局所的に開発する
実装を追加していく場合は、大局的な計画に適合すべきです。
抽象化する際には、全てに対して抽象化する
基本データ型を使ってデータ項目を表してはいけません。
ほとんどのStringは、単なるString以上のものである
Stringを基本データ型として扱います。属性は、Stringではなく抽象データ型(ADT)で記述します。
テキストにすべきか否か
テキストは、プログラム内ではなくプログラム間で使用します。
クラスへのメソッドの配置は、メソッドが何を必要としているかに基づいて行う
メソッドがインスタンスデータを必要としていなければ、そのメソッドはそのクラスのメンバにすべきではありません。逆に、メソッドの必要とするものがインスタンスデータだけであれば、そのメソッドはそのクラスのメンバにすべきです。
ポリシーと実装を分離する
実行することとその方法を分離するようにすると、実行することが読みやすく、保守しやすくなります。
関心事を分離して、関心事を小さくする
複数のメソッドと複数のクラスに責務を分割して、各メソッドとクラスを簡潔にします。
インターフェースを分割する
複数のクライアントが1つのインターフェースの異なる部分を使っている場合、そのインターフェースを複数のインターフェースに分割します。
バラ以外の名前がついたバラは、バラではない
システムの各概念に対して、明確に定義された名前を作成します。
テストできないものを必要としてはいけない
公式に述べられていようと、非公式に述べられていようと、全ての機能要件には、その機能用に作成されたテストを持つべきです。要件をテストできなければ、その要件を満たしているか判断する方法はありません。