いいコードを書く技術 コード分割
1.コードの分割
コード分割のプロセス
①トップダウン方式
「俺視点」で便利なクラスを作るやり方
テスト駆動型開発もこの分類に入る
使い方=インタフェース(入出力)から考えてクラス分割する
[問題]
トップダウン方式は、難しい。
コードを何手か先まで読めないとうまくいかない。
②ボトムアップ方式
後から分割する方式
[流れ]
(1)共通処理を抜き出す
※引数やフィールド変数の状態を変更するメソッドは副作用がある
極力作らない事が望ましい
(2)一部でしか使用しないのに、影響範囲が大きい変数がないかをチェック
(3)1メソッドのコードが長すぎて処理の流れや全体像が読みづらくなってないか
(4)処理単位で分割する
制御構造と処理を分割する
よくある例
・ループの制御構造と1件の要素を処理するメソッドに分割できる
・if文とその中の処理
・try~catch~finallyとその中の処理
(5)状態を持つ処理をクラスに抽出し分割
2.コードの重複は悪
変更が発生したときの修正作業が大変
まとめることで保守性をあげましょう
(1)メソッドに抽出してまとめる(一番簡単)
(2)継承でまとめる
まとめたいコードを親クラスに移動させていくと
巨大な親クラスが出来上がる可能性がある。
※単一継承の制限
(3)ユーティリティクラスにまとめる
特定の処理に便利なメソッドを集めたクラス
ユーティリティクラスのメソッドは基本的に
状態を持たない処理をstaticなメソッドとして定義します。
(4)サービス層にまとめる
アプリケーションの中核となる機能や仕様は、サービス層として
コードを集約する方法があります。
(5)オブジェクトにまとめる
オブジェクト参照をすることが多い処理は、そのオブジェクト自身に
メソッドがあるほうがよい場合がある
(6)定数にまとめる
値を定数化し、重複をなくす
コードのなかで1と書かれているよりも、「TYPE_SHARE」などと
書かれているほうが可読性は高くなる
まとめすぎは注意
基本はYAGNIの精神にのっとって「同じコードが2回出たらまとめる」位の
気持ちでOK!
YAGNIとは↓
http://ja.wikipedia.org/wiki/YAGNI
そんなの必要ないって!という意味で覚えとく。