すべてを飲み込む
ブラックホール
「Utilクラス」「Managerクラス」。
便利な名前をつけた箱には、あらゆるゴミ(機能)が投げ込まれます。
その箱は肥大化し続け、重力崩壊を起こし、近づく開発者すべてを吸い込みます。
- `Utils.php` や `Common.java` というファイルが5000行を超えている
- 一つのクラスが、DB接続も、メール送信も、バリデーションもやっている
- そのファイルを修正すると、Gitのコンフリクト(競合)が必ず起きる
- 「神(God)」と呼ばれるクラスがあり、誰も触りたがらない
これ以上大きくなると、リファクタリングも再構築も不可能な「事象の地平線」を超えます。
01. なんでも屋の悲劇
「置き場所に困ったら、とりあえず `Common` に入れておこう」。
その安易な判断が、悲劇の始まりです。
一つのクラスがあらゆる責任(Responsibility)を持ちすぎると、誰も全貌を把握できなくなります。
修正の影響範囲が見えず、デグレーション(改修によるバグ)が頻発します。
それはもはやクラスではなく、巨大で複雑な手続きの塊です。
一つのクラスは、
一つのことだけをうまくやるべきだ。
02. クラスの分割統治
巨大なクラスを倒すには「分割統治」しかありません。
メール送信機能は `EmailService` に。バリデーションは `Validator` に。
機能ごとに小さなクラスに切り出し、それぞれに専門の役割を与えます。
小さなクラスは読みやすく、テストしやすく、再利用しやすい。
森(全体)を見る前に、一本一本の木(クラス)を健康にしましょう。
03. 名前が命
クラスが巨大化する原因は、名前が曖昧だからです。
`Manager`、`Processor`、`Data`。
これらの名前は「何でもあり」を許容してしまいます。
もし `UserPasswordResetContext` という名前なら、そこに注文処理を書こうとは誰も思いません。
具体的で、狭い範囲を指す名前をつけること。
それが、ブラックホールの生成を防ぐ第一歩です。