【ごっどおぶじぇくと】

ゴッドオブジェクト とは?

💡 何でもやる「神クラス」は地獄への片道切符
📌 このページのポイント
ゴッドオブジェクト vs 適切な分離 ✕ ゴッドオブジェクト GodClass ユーザー管理 注文処理 メール送信 ログ記録 バリデーション DB接続 ... 全部入り ○ 適切に分離 UserService ユーザー管理 OrderService 注文処理 MailService メール送信 Logger ログ記録 Validator バリデーション DbClient DB接続 変更が全体に影響 単一責任で保守しやすい
ゴッドオブジェクトと適切な責務分離の比較
ひよこ ひよこ

どうやってゴッドオブジェクトに気づく?

ペンギン先生 ペンギン先生

わかりやすいサインがあるよ。①ファイルが1000行を超えている、②メソッドが30個以上ある、③クラス名がManager、Handler、Processorなど曖昧、④import文が大量にある、⑤変更するたびに他の機能が壊れる。UserManagerが認証、メール送信、課金、ログ出力を全部やっているとかね

ひよこ ひよこ

なんでそうなるの?

ペンギン先生 ペンギン先生

最初は小さなクラスだったのに、「ここに追加するのが楽だから」と機能を足し続けた結果。デッドラインに追われて設計を考える余裕がないと加速する。「動いているコードを分割するのは怖い」という心理も原因。技術的負債の典型パターンだよ

ひよこ ひよこ

おもしろい!どうやって分割する?

ペンギン先生 ペンギン先生

①まずテストを書いて安全網を作る、②関連するメソッドとフィールドをグループ化、③グループごとに新しいクラスに抽出(Extract Classリファクタリング)、④元のクラスは新しいクラスに委譲。一度に全部やらず、変更のついでに少しずつ分割する「ボーイスカウトルール」がおすすめだよ

ひよこ ひよこ

予防するには?

ペンギン先生 ペンギン先生

SOLID原則、特に単一責任の原則を意識する、②コードレビューでクラスの肥大化を早期に指摘する、③「このクラスの責務を一言で説明できるか?」を自問する。一言で説明できないなら責務が多すぎるサイン。CIにクラスの行数やメソッド数の警告を入れる方法もあるよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ゴッドオブジェクト」って出てきたら「責務を持ちすぎた巨大クラス(アンチパターン)」と思えればだいたいOK!
📖 おまけ:英語の意味
「God Object / God Class」 = 神オブジェクト
💬 全知全能の神のように何でもこなすクラス。でも実際は保守地獄だよ
← 用語集にもどる