/note/tech

役割駆動設計で巨大クラスを爆殺する

モデリング初心者の陥りがちな罠は、役割ではなく「モノに着目してしまう」という点です。

「ユーザー」「商品」「金額」……これらは単なるモノの名前であって、何ら役割を表現していません。

例えばECサイトでは、「ユーザー」は「発注者」や「受注者」、「出荷担当」「支払者」など場面に応じて様々な役割があります。「商品」も場面により「出品物」「発送品」「納品物」などになりますし、「金額」も「希望小売価格」「割引価格」「支払い金額」など状況により様々な顔を覗かせます。

それらを「ユーザー」「商品」「金額」という「モノに着目した」命名をしてしまうとどうなるかは、先の例で示した通りです。

名前を「役割で縛ってない」ため、際限なく様々な役割を吸収し、数千数万行単位の化け物と化してしまうのです。

モデリングにおいて、役割の概念を表現していない名前で安易に命名するのはアンチパターンです。

RoRやCakePHPの「ユーザー」モデルがアホみたいに肥大化するのはモノに着目したモデリングアンチパターンだったという事か。

役割でクラスを分けるのは効果的だと思うけど、開発者間でも合意を得るのが難しそうな気もする。