Mistake #34 : God Class

すべてを飲み込む
ブラックホール

「Utilクラス」「Managerクラス」。
便利な名前をつけた箱には、あらゆるゴミ(機能)が投げ込まれます。
その箱は肥大化し続け、重力崩壊を起こし、近づく開発者すべてを吸い込みます。

⚫️ 巨大クラス診断
  • `Utils.php` や `Common.java` というファイルが5000行を超えている
  • 一つのクラスが、DB接続も、メール送信も、バリデーションもやっている
  • そのファイルを修正すると、Gitのコンフリクト(競合)が必ず起きる
  • 「神(God)」と呼ばれるクラスがあり、誰も触りたがらない
⚠️ 警告:あなたのプロジェクトには「特異点」が存在します。
これ以上大きくなると、リファクタリングも再構築も不可能な「事象の地平線」を超えます。

01. なんでも屋の悲劇

God Class
User Logic
Payment
Email
Logging

「置き場所に困ったら、とりあえず `Common` に入れておこう」。
その安易な判断が、悲劇の始まりです。
一つのクラスがあらゆる責任(Responsibility)を持ちすぎると、誰も全貌を把握できなくなります。
修正の影響範囲が見えず、デグレーション(改修によるバグ)が頻発します。
それはもはやクラスではなく、巨大で複雑な手続きの塊です。

単一責任の原則。
一つのクラスは、
一つのことだけをうまくやるべきだ。

02. クラスの分割統治

巨大なクラスを倒すには「分割統治」しかありません。
メール送信機能は `EmailService` に。バリデーションは `Validator` に。
機能ごとに小さなクラスに切り出し、それぞれに専門の役割を与えます。
小さなクラスは読みやすく、テストしやすく、再利用しやすい。
森(全体)を見る前に、一本一本の木(クラス)を健康にしましょう。

03. 名前が命

クラスが巨大化する原因は、名前が曖昧だからです。
`Manager`、`Processor`、`Data`。
これらの名前は「何でもあり」を許容してしまいます。
もし `UserPasswordResetContext` という名前なら、そこに注文処理を書こうとは誰も思いません。
具体的で、狭い範囲を指す名前をつけること。
それが、ブラックホールの生成を防ぐ第一歩です。

執筆:オブジェクト指向設計マイスター

SOLID原則を布教するアーキテクト。
「凝集度(Cohesion)」を高め、「結合度(Coupling)」を下げる設計を指導する。