勉強日記

チラ裏

Clean Code ch12 Emergence

www.oreilly.com


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にすることも検討する
  • 高水準のアルゴリズムの重複: Template Method Patternを適用する

Expressive

  • 長い長い運用のコストを下げるために
  • 良い命名
  • 関数やクラスを小さくする
    • 命名しやすい
    • 書きやすい
    • 理解しやすい
  • 標準の命名法を使用する
  • よくできた単体テスト
  • 一番重要なのは、気遣い
    • 【補】try の意訳
    • 次にそのコードを読む人が読みやすくなるように
      • たいてい自分自身ですよ

Minimal Classes and Methods

  • クラスやメソッドを小さくしようとしすぎると、数が増えすぎる問題
  • システムのサイズも小さくするために、クラスや関数の数は最小限に
    • ただし先述の3ルールよりは優先度低い
  • 【補】A Philosophy of Software Design でもこのことには触れられている
    • モジュールのインタフェースの数が増えるということは、学習コスト = 認知の負荷が増え、複雑性が増すということ

英語