😀
クラス設計の鉄則メモ
モジュール性とは
- システムを独立性の高い部品の組み合わせで構成すること
- 各部品の役割が明確
- 接続(インターフェース)が明確
- 交換・追加がしやすい
- 泥団子な構造(全てが繋がっている)を避ける
モジュールの例
- 関数型:関数単位で分離
- オブジェクト指向:クラス単位で分離(データ+メソッド)
関心の分離
- ロジック(判断・計算)と入出力(表示・DBアクセス)は分ける
- 関心が混ざると複雑になる
- トランザクションスクリプト・テーブルモジュールだけでは限界あり
工夫
- アプリ固有のデータ型を作る(例:値オブジェクト)
- 不要なものを見えなくする(可視性の制御)
依存関係
- クラスの参照関係に注目
- 依存が少ないほど再利用・テスト・変更がしやすい
依存の種類
- 暗黙的な依存:コードから分かりにくい
- 明示的な依存:引数やインターフェースで明示
ポイント
- 依存はなるべく明示的に
- メソッドの仕様(契約)を明確にする
- Design by Contract 的に考える
リファクタリングのヒント
- インスタンス変数の多いクラスに注目
- 空行で変数をグループ分け
- 並び順を意味のある順に整える
- 関連する変数群ごとにクラスを切り出すとよい
スローガン
- 泥団子を避けよう
- 関心を分けよう
- 依存は明示的に
Discussion