神はなぜ生まれるのか
スタートアップでは、変化についていくために開発スピードを早める必要があります。開発スピードを早めるためには、DDDのような設計やレイヤードアーキテクチャのようなアーキテクチャ設計を行う必要があります。
コントローラーが肥大化し、よく使う処理を関数化したくなることがあります。しかし、ルールがないために共通処理を作成するクラスの場所がわからないこともあります。とりあえず共通処理を書くクラスを作成することで、神が生まれました。
神は我々に何をもたらすのか
神は何でも知っているため、何でも教えてくれたり解決してくれたりします。しかし、神は次第に肥大化し、手に負えない存在になってしまいます。神の力を得るためには、目的の力にたどり着くために1,000行や2,000行のソースコードを読まなければならないこともあります。
偉大な神の存在は、実際には技術的負債となることもあります。
神はどのようにすればよいのか
肥大化したクラスは取り扱いが難しく、メンテナンスも困難です。そのようになったら、神の分化を始めましょう。分化の単位は責務ごとに行います。例えば、長さのコンバート処理と画像のコンバート処理は責務が異なるため、それぞれ別のクラスに分けるべきです。
神を作る前に立ち止まってみよう
クラスが肥大化することを防ぐためには、いくつかの方法があります。まずは、関数を作成することをやめて、思考を停止しましょう。クラスを触る際や作成する際には、一度立ち止まって考えることが重要です。
既存のクラスに処理を追加する際には、注意が必要です。例えば、長さのコンバート処理をしているクラスに画像のコンバートを追加しないようにすることが重要です。同じコンバートという括りでも、クラスを分けることでクラスの肥大化を防ぐことができます。また、クラスを作成する際も、コンバートという抽象的な名前ではなく、長さのコンバートクラスや画像のコンバートクラスなど具体的なクラス名を付けることも肥大化を防ぐ手段となります。
本当に神は悪なのか
神クラスはある程度のスピードが求められるスタートアップにおいては避けられない場合もあります。DDDやクリーンアーキテクチャの実施は困難かもしれません。しかし、クリーンアーキテクチャではなくとも、ある程度のアーキテクチャを設計して実施することで、神クラスを生み出すことは避けられます。処理を一つにまとめることは便利ですが、諸刃の剣であることは間違いありません。スピード感のある開発の中で、神クラスを作らないように心掛けましょう。