🎨

良いディレクトリ構成悪いディレクトリ構成

2020/10/20に公開

はじめに

ディレクトリの構成はプログラムの可読性に大きく影響させます。この記事ではディレクトリはドメイン単位で区切る事を提案します。

*あくまで個人の意見です

良いディレクトリ構成とは

良いディレクトリ構成を考えるためにまずディレクトリを切る目的を考えます。

ディレクトリを切る目的

ディレクトリを切る目的はプログラムの見通しをよくするためです。
では見通しをよくするディレクトリ構成とはどのような区切りでしょうか。

見通しの良いディレクトリ構成と悪いディレクトリ構成

悪いディレクトリ構成

  • 機能で分割している

機能で分離しているディレクトリ構成はよくない構成です。これはよくなされる構成ですが、プロジェクトが大きくなるにつれて扱いづらくなってきます。

.
├── controllers
│   └── user.controller.ts
├── models
│   └── user.model.ts
└── services
    └── user.service.ts
    └── http-client.service.ts

良いディレクトリ構成

  • 扱うドメインで分離している
  • 扱うドメインに依存しない汎用機能を別ディレクトリに切り出している
.
├── user
│   ├── user.controller.ts
│   ├── user.model.ts
│   └── user.service.ts
└── utilities
    └── http-client.service.ts

なぜ機能でなくドメインで区切るべきなのか

ディレクトリの区切りは部屋の区切りと似ていてます。部屋はリビングやキッチンなどその部屋の目的でまず区切られるのであって、タオルやティッシュなど衛生用品が置いてある部屋、机や本棚など木材家具が置いてある場所などで部屋を区切る事はしません。仮に置いてあるものの種類で区切られた家で過ごす場合、複数の部屋を行ったり来たりしないと生活できません。

ディレクトリ構成も同じです。プログラムは特定の問題(ドメイン)を処理するために記述するため、関心の中心はドメインとなります。1つのドメインを扱うときにディレクトリを行ったり来たりしないようにするには、機能の種類でなくドメインを中心にディレクトリ構成を考える必要があります。

結論

ディレクトリはドメイン単位で区切り、機能の種類で区切るのは避けるようにしましょう。

Discussion