ディレクトリ構造
作成日時:2025-11-04
更新日時:2025-11-04
概要
個人的な好みによるディレクトリ構造。
構造
Springでの例。
features/
├── user/
│ ├── service/ # ユーザー横断サービス
│ │ └── UserService.java
│ │
│ ├── register/
│ │ ├── RegisterUserController.java
│ │ ├── RegisterUserUseCase.java
│ │ ├── RegisterUserMapper.java # MyBatis自動生成外SQL
│ │ ├── RegisterUserRequest.java # Validationはアノテーション+Controllerでやる
│ │ └── RegisterUserResponse.java # 内部クラスとか
│ │
│ └── update/
│ ├── UpdateUserController.java
│ ├── UpdateUserUseCase.java
│ └── UpdateUserRequest.java
│
├── product/
│ └── create/
│ ├── CreateProductController.java
│ ├── CreateProductUseCase.java
│ └── CreateProductRequest.java
│
shared/
├── mapper/ # MyBatis自動生成 + 共有SQL
│ ├── UserMapper.java
│ └── ProductMapper.java
│
├── service/ # システム横断
│ └── NotificationService.java
│
├── reader/
│ ├── IReader.java
│ ├── CsvReader.java
│ └── XlsxReader.java
├── util/
│ └── 3rd-PartyライブラリのWrapperなど
├── dto/ # 共有DTO
└── exception/
│ └── CustomException.java
│
config/ # Spring設定
└── security/, aop/, etc
│
domain/ # DDD
└── user/User.java, product/Product.javaコメント
基本的にフィーチャーベースが好き。
関心事を分離できる。
その機能に関する修正は、そのディレクトリ直下だけを見ればいい。
基本構成は、feature + shared + other。
Webでもバッチでもこの構成。
フロントは分からない。
component + page + domainかな。
その他
- 関心事の徹底分離
- 1API-1構造
- レイヤードは
- Fatになりやすい
- 1APIの内容を調査するために複数のディレクトリを飛ぶ
- モジュラーにしたい
- 会社ごとの固有機能を持たせる場合も、そのディレクトリ内で完結させる
- 内部にIF作って
切り分け
小規模ならばレイヤードでいい。
大きくなるならフィーチャーベース。