X(Twitter) Zenn GitHub RSS 共有

ディレクトリ構造

作成日時: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かな。

その他

切り分け

小規模ならばレイヤードでいい。
大きくなるならフィーチャーベース。