第8章

9284 ワード

モバイル機能


8.1移動関数


モジュール化:相互に関連するものを集約します.モジュール化の度合いが高い場合は、機能の変更を試みる際に、他の機能を理解できなくすることができます.そして水晶は一つの場所でしか起こらない.
すべての関数はコンテキストに存在し、多くは特定のモジュールに属します.カプセル化するためには,関数が参照する場所の多いモジュールに関数を移すことが望ましい.また、呼び出し元の現在位置または次の更新時に変更される可能性のある位置に基づいて関数を移動する必要がある場合もあります.

プログラム

  • 選択した関数が現在のコンテキストで使用されているすべてのプログラム要素を表示します.これらの要因の中にも一緒に移行する必要があるかどうかを考えてみましょう.
  • 選択した関数が多形メソッドであるかどうかを確認します.
  • で選択した関数をターゲットコンテキストにコピーします.ターゲット関数を調整して、新しい地盤によく位置決めします.
  • 静解析を行った.
  • ソースコンテキストでターゲット関数の参照メソッドを検索して反映します.
  • ソース関数をターゲット関数の委任関数に変更します.
  • テスト
  • .
  • ソース関数をインラインするかどうかを考慮します.
  • // before
    function trackSummary(points) {
      const totalTime = calculateTime();
      const totalDistance = calculateDistance();
      const pace = totalTime / 60 / totalDistance;
      return {
        time: totalTime,
        distance: totalDistance,
        pace: pace
      };
      
      function calculateDistance() {
        let result = 0;
        for (let i = 1; i < points.length; i++) {
          result += distance(points[i-1], points[i]);
        }
        return result;
      }
      
      function distance(p1, p2) { ... }
      function radians(degrees) { ... }
      function calculateTime() { ... }
    }
    // after
    function trackSummary(points) {
      const totalTime = calculateTime();
      const pace = totalTime / 60 / totalDistance(points);
      return {
        time: totalTime,
        distance: totalDistance(points),
        pace: pace
      };
    }
    
    function totalDistance(points) {
      let result = 0;
      for (let i = 1; i < points.length; i++) {
        result += distance(points[i-1], points[i]);
      }
      return result;
    }
      
    function distance(p1, p2) { ... }
    function radians(degrees) { ... }
    function calculateTime() { ... }
    

    8.2フィールドの移動


    8.3文を関数に移動


    8.4文を呼び出し位置に移動する


    Reference

  • https://zigsong.github.io/2022/04/01/refactoring-8/