【ごっどおぶじぇくと】

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

最終更新:
💡 一つに詰め込みすぎた責務を、変更の理由で整理する

あまりに多くの責務を持ちすぎたクラスやモジュール。保守性を著しく低下させるアンチパターン。

📌 このページのポイント
詰め込みすぎたクラスを整理 責務が集中 責務ごとに分離 UserManager 認証 メール送信 課金 全部を抱え込む Auth 認証 Mailer メール送信 Billing 課金 別々の理由で変わる処理を分ける テストで動作を確かめながら少しずつ抽出 行数や名前だけでは判断しない
同じクラスの中に混在した責務を見直す例。小さく分けること自体を目的にせず、変更理由や処理どうしの関連を確認する。
ひよこ ひよこ
どうやってゴッドオブジェクトに気づく?
ペンギン先生 ペンギン先生
一つのクラスに、別々の理由で変更する処理が集まっていないか見よう。たとえばUserManagerが認証、メール送信、課金まで抱えている場合だよ。行数やメソッド数は手掛かりになるけれど、「1000行なら該当」のような共通の境界ではないんだ。
ひよこ ひよこ
大きなクラスなら全部ダメなの?
ペンギン先生 ペンギン先生
名前や大きさだけでは決まらないよ。処理どうしの関連が薄い、ほかのクラスのデータに過度に依存する、変更が無関係な機能に及ぶ、といった点を調べるんだ。機能を追加するたびに同じクラスへ詰め込むと、こうした状態になりやすいね。
ひよこ ひよこ
どうやって分割する?
ペンギン先生 ペンギン先生
まず今の振る舞いをテストで確認できるようにしよう。関連するメソッドとフィールドを新しいクラスへ取り出し、元のクラスから呼び出す。Extract Classというリファクタリングだよ。小さく変更して、外から見た動作が変わらないことを確かめるんだ。
ひよこ ひよこ
予防するには?
ペンギン先生 ペンギン先生
単一責任の原則を意識し、何が変わったときにこのクラスを直すのかをレビューしよう。同じ理由で変わる処理はまとめ、異なる理由で変わる処理は分ける。静的解析の警告も、設計を見直すきっかけとして使えるよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ゴッドオブジェクト」って出てきたら「責務を持ちすぎた巨大クラス(アンチパターン)」と思えればだいたいOK!
📖 おまけ:英語の意味
「God Object / God Class」 = 神オブジェクト・神クラス
💬 全知全能の神のように何でも知り、何でもこなそうとするクラスをたとえた言葉だよ。責務が集中して、理解や変更が難しくなる状態を指すんだ

参考資料

← 用語集にもどる