Clean Code ch12 Emergence
- Getting Clean via Emergent Design
- Simple Design Rule 1: Runs All the Tests
- Simple Design Rules 2-4: Refactoring
- No Duplication
- Expressive
- Minimal Classes and Methods
- 英語
Getting Clean via Emergent Design
- Kent Beckによる4つのルール
- Runs all the tests
- Contains no duplication
- Expresses the intent of the programmer
- Minimizes the number of classes and methods
- これに従えば、そのシステムは「シンプル」
- 重要度順
Simple Design Rule 1: Runs All the Tests
- システムが理屈上完璧な設計でも、実際に意図通りに動作することを簡単に検証できないならば、疑わしい
- テストできないシステムは動作を検証できない
- 動作を検証できないシステムはデプロイされるべきではない
- 幸い、テスト可能にすると良い設計へ向かう
- まずい設計だとテストを書くのが困難
- 逆に、テストを書けば書くほど、テストを書きやすい良い設計になる
- Single Responsibility
- 疎結合・高凝集
Simple Design Rules 2-4: Refactoring
- テストがあれば変更が怖くない
- 変更が怖くないので種々のリファクタリングを行える
- 先述のルールのうち3つはこれで適用できる
No Duplication
- 低水準の小さな部分の重複: private関数を抽出する
- SRP違反も疑い、別クラスに切り出してpublicにすることも検討する
- 【補】単体テスト可能になる
- SRP違反も疑い、別クラスに切り出してpublicにすることも検討する
- 高水準のアルゴリズムの重複: Template Method Patternを適用する
Expressive
- 長い長い運用のコストを下げるために
- 良い命名
- 関数やクラスを小さくする
- 命名しやすい
- 書きやすい
- 理解しやすい
- 標準の命名法を使用する
- よく知られたデザインパターンから名前をとるなど
- よくできた単体テスト
- 単体テストの主目的は例示によるドキュメンテーション
- 一番重要なのは、気遣い
- 【補】try の意訳
- 次にそのコードを読む人が読みやすくなるように
- たいてい自分自身ですよ
Minimal Classes and Methods
- クラスやメソッドを小さくしようとしすぎると、数が増えすぎる問題
- システムのサイズも小さくするために、クラスや関数の数は最小限に
- ただし先述の3ルールよりは優先度低い
- 【補】A Philosophy of Software Design でもこのことには触れられている
- モジュールのインタフェースの数が増えるということは、学習コスト = 認知の負荷が増え、複雑性が増すということ
英語
- nomenclature
- 命名法