s平面の左側

左側なので安定してます(制御工学の話は出てきません)

どうして Util / Common クラスはよくないのか?

この記事について

Willgate Advent Calendar 201820日目の記事。

ちょうど社内で「この処理を共通化したいけど、どこに切り出せばよいか?」という話題があがったので、そのとき述べた私の意見をブログにも書くことにした。

処理を共通化するときにどこに切り出すか?

具体的な答えはその時々によって変わるが、共通処理をまとめるクラス(Util, Common みたいなもの)を作るの避け「明確な目的を持った小さなクラス」を「(意味が通る範囲内で)できるだけ下位の階層につくる」のが基本方針。

その理由は?

一言で言うなら「関心の分離」。

共通処理をまとめるクラスが存在してしまうと「なんでもそこに突っ込もう」という習慣ができていしまい、気づけばメンテナンスしにくい巨大なクラスができてしまいがち。

「明確な目的を持った」というところがポイントで、つまるところ「1つのことをうまくやる」クラスなら挙動を理解しやすく、コードも追いやすくなると期待できる。

ディレクトリをできるだけ下位にするのも同様な考えに基づいており、責任の範囲を明確にするためである。

高い階層にあると「これはどこで使われるのか?」という情報がわかりにくく、本来意図しない用途で使われたりして、結果「修正した際の影響範囲が予想できなくなる」という問題の原因になってしまう。