Clean Code ch12 Emergence

Clean Code勉強メモ

出典: 

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 でもこのことには触れられている

    • モジュールのインタフェースの数が増えるということは、学習コスト = 認知の負荷が増え、複雑性が増すということ

英語

  • nomenclature

    • 命名法