😀

クラス設計の鉄則メモ

に公開

モジュール性とは

  • システムを独立性の高い部品の組み合わせで構成すること
  • 各部品の役割が明確
  • 接続(インターフェース)が明確
  • 交換・追加がしやすい
  • 泥団子な構造(全てが繋がっている)を避ける

モジュールの例

  • 関数型:関数単位で分離
  • オブジェクト指向:クラス単位で分離(データ+メソッド)

関心の分離

  • ロジック(判断・計算)と入出力(表示・DBアクセス)は分ける
  • 関心が混ざると複雑になる
  • トランザクションスクリプト・テーブルモジュールだけでは限界あり

工夫

  • アプリ固有のデータ型を作る(例:値オブジェクト)
  • 不要なものを見えなくする(可視性の制御)

依存関係

  • クラスの参照関係に注目
  • 依存が少ないほど再利用・テスト・変更がしやすい

依存の種類

  • 暗黙的な依存:コードから分かりにくい
  • 明示的な依存:引数やインターフェースで明示

ポイント

  • 依存はなるべく明示的に
  • メソッドの仕様(契約)を明確にする
    • Design by Contract 的に考える

リファクタリングのヒント

  • インスタンス変数の多いクラスに注目
  • 空行で変数をグループ分け
  • 並び順を意味のある順に整える
  • 関連する変数群ごとにクラスを切り出すとよい

スローガン

  • 泥団子を避けよう
  • 関心を分けよう
  • 依存は明示的に

Discussion