いいコードを書く技術 コード分割

1.コードの分割

 コード分割のプロセス

 ①トップダウン方式

「俺視点」で便利なクラスを作るやり方

  テスト駆動型開発もこの分類に入る

  使い方=インタフェース(入出力)から考えてクラス分割する

 

  [問題]

  トップダウン方式は、難しい。

  コードを何手か先まで読めないとうまくいかない。

 

 ②ボトムアップ方式

  後から分割する方式

  

  [流れ]

  (1)共通処理を抜き出す

   ※引数やフィールド変数の状態を変更するメソッドは副作用がある

    極力作らない事が望ましい

  (2)一部でしか使用しないのに、影響範囲が大きい変数がないかをチェック

  (3)1メソッドのコードが長すぎて処理の流れや全体像が読みづらくなってないか

  (4)処理単位で分割する

   制御構造と処理を分割する

   よくある例

    ・ループの制御構造と1件の要素を処理するメソッドに分割できる

    ・if文とその中の処理

    ・try~catch~finallyとその中の処理

  (5)状態を持つ処理をクラスに抽出し分割

 

2.コードの重複は悪

 変更が発生したときの修正作業が大変

 まとめることで保守性をあげましょう

 

 (1)メソッドに抽出してまとめる(一番簡単)

 

 (2)継承でまとめる

  まとめたいコードを親クラスに移動させていくと

  巨大な親クラスが出来上がる可能性がある。

  ※単一継承の制限

   JavaRubyは継承できる親クラスはひとつだけ

 

 (3)ユーティリティクラスにまとめる

  特定の処理に便利なメソッドを集めたクラス

  ユーティリティクラスのメソッドは基本的に

  状態を持たない処理をstaticなメソッドとして定義します。

 

 (4)サービス層にまとめる

  アプリケーションの中核となる機能や仕様は、サービス層として

  コードを集約する方法があります。

 

 (5)オブジェクトにまとめる

  オブジェクト参照をすることが多い処理は、そのオブジェクト自身に

  メソッドがあるほうがよい場合がある

 

 (6)定数にまとめる

  値を定数化し、重複をなくす

  コードのなかで1と書かれているよりも、「TYPE_SHARE」などと

  書かれているほうが可読性は高くなる

 

 まとめすぎは注意

 基本はYAGNIの精神にのっとって「同じコードが2回出たらまとめる」位の

 気持ちでOK!

 

 YAGNIとは↓

 http://ja.wikipedia.org/wiki/YAGNI

 そんなの必要ないって!という意味で覚えとく。