- 単一責任(Single Responsibility)
- オープン・クローズド(Open-Closed)
- リスコフの置換(Liskov Substitution)
- インターフェース分離(Interface Segregation)
- 依存性逆転(Dependency Inversion)
TRUE なコード
- 見通しが良い(Transparent) 変更がもたらす影響が明白
- 合理的(Reasonable) 変更によってそのコストに値する利益が得られる
- 利用性が高い(Usable) 新しい環境、予期していなかった環境でも再利用できる
- 模範的(Exemplary) コードに変更を加える人が上記の品質を自然に保てるようになっている
クラスを単一責任にさせ、余計な責任は隔離する
- 依存性の注入(依存オブジェクトの注入)
クラスの定義の中に別のクラスのインスタンスを含めるのではなく、クラスの初期化時の引数にインスタンスを含める
- 依存性の隔離
クラスの定義の中に別のクラスのインスタンスを含める時は、initializeのような初期化メソッドの中に含めて他のメソッドと区別したり、新たにメソッドを作ってその中に閉じ込めたりする
- 引数の順番への依存を取り除く
引数を連想配列にする
- 依存関係をうまく選択する
場合によっては依存関係を逆転させた方がいいかもしれない
より変更の少ないものへ依存させることが重要
クラス内に実装されるメソッドのうち外部のオブジェクトに使われるものがパブリックインターフェースを構成する
パブリックインターフェースはクラスの主要な責任を明らかにするもので、気まぐれに変更されないことやテストが書かれることが想定される。対照的に、プライベートインターフェースはどんな理由でも変更されうるもので、テストが書かれない場合もある。
パブリックインターフェースは「どのように」よりも「何を」になっている。
「直接の隣人にのみ話しかけよう」
いくつものドットを含むメッセージチェーンにならないようにする