Clean Code:作成さくせい



ケントベックが提案した以下の4つの簡単な設計規則は、設計品質を大幅に向上させる.
  • は、すべてのテストを実行します.
  • 重複除外.
  • プログラマーの意図を表します.
  • クラスとメソッドの数を最小限に抑えます.
  • 1.すべてのテストを実行


  • システムが予想通りに稼働しているかどうかを検証する方法が必要です.

  • テスト可能なシステムの作成に努力すれば、設計の質が向上します.

  • SRPに準拠したクラスはテストしやすい.

  • 作成されたテストケースが多ければ多いほど,開発者はDIPの原則を採用し,依存注入,インタフェース,抽象などのツールを用いて結合度を低減する.
  • 2.リフォーム


    すべてのテストコードを作成した後、コードとクラスをクリーンアップ(再構築)できます.
    テストケースがあれば、再設計中にシステムがクラッシュする心配はありません.
    この段階では,設計の質を高める手法であれば応用できる.

    3.重複除外


    繰り返していろいろな形で表現します.
    繰り返しを実現することも繰り返しの形式である.集合クラスには2つの方法があると仮定します.
    int size() {}
    boolean isEmpty() {}
    各方法は別々に実施することができるが、isEmpty()size()を使用する場合、コードを繰り返し実行する必要はない.
    boolean isEmpty() {
      return 0 == size();
    }
    TEMPLATE METHODモードを使用して、高レベルの重複データを排除することもできます.
    public class VacationPolicy {
      public void accrueUSDivisionVacation() {
        // 지금까지 근무한 시간을 바탕으로 휴가 일수를 계산하는 코드
        // ...
        // 휴가 일수가 미국 최소 법정 일수를 만족하는지 확인하는 코드
        // ...
        // 휴가 일수를 급여 대장에 적용하는 코드
        // ...
      }
      
      public void accrueEUDivisionVacation() {
        // 지금까지 근무한 시간을 바탕으로 휴가 일수를 계산하는 코드
        // ...
        // 휴가 일수가 EU 최소 법정 일수를 만족하는지 확인하는 코드
        // ...
        // 휴가 일수를 급여 대장에 적용하는 코드
        // ...
      }
    }
    上記のコードは,TEMPLATE METHODモードを用いて重複を排除できるほぼ同じ方法を持っている.
    abstract public class VacationPolicy {
      public void accrueVacation() {
        calculateBaseVacationHours();
        alterForLegalMinimums();
        applyToPayroll();
      }
      
      private void calculateBaseVacationHours() { /*...*/ };
      abstract protected void alterForLegalMinimums();
      private void applyToPayroll() { /*...*/ };
    }
    
    public class USVacationPolicy extends VacationPolicy {
      @Override protected void alterForLegalMinimums() {
        // 미국 최소 법정 일수를 사용한다.
      }
    }
    
    public class EUVacationPolicy extends VacationPolicy {
      @Override protected void alterForLegalMinimums() {
        // EU 최소 법정 일수를 사용한다.
      }
    }

    4.表現


    後でコードを維持する人は、コードを書く人と同じように、問題を深く理解する可能性は低い.
    したがって,コードは開発者の意図を明確に表現しなければならない.コードが明確であればあるほど、他人が理解しやすくなり、欠陥が少なくなり、メンテナンスコストが低くなります.

  • 名前を選んで

  • 関数とクラスのサイズを最小限に抑える

  • 標準名の使用

  • ユニットテストの例を注意深く作成する
  • これから読む人のことを考えて、できるだけ読みやすくしてください.

    5.クラスとメソッドの数を最小限に抑える


    クラスやメソッドのサイズを極端に縮小するために,小クラスやメソッドが多すぎる場合がある.
    これを防ぐためには、できるだけ関数やクラスの数を減らすことをお勧めします.
    ただし、クラスやメソッドの数に比べて、テストケースの作成、重複の排除、意図の表現のタスクを優先的に処理する必要があります.