クリーンアーキテクチャは、業務ルールをUI、DB、Webフレームワークなどの詳細から切り離す設計思想です。

Dependency Rule
中心に近いコードは、外側の事情を知りません。
Framework / DB → Adapter → Use Case → Domain
矢印はコードの依存方向です。ユースケースがDBへ保存する必要があっても、特定ORMを直接呼びません。内側で保存用interfaceを定義し、外側のadapterが実装します。
interface OrderRepository {
save(order: Order): Promise<void>;
}
class PlaceOrder {
constructor(private orders: OrderRepository) {}
async execute(input: PlaceOrderInput) {
const order = Order.place(input);
await this.orders.save(order);
}
}
Controllerは入力をユースケース用の値へ変換し、結果をHTTPへ戻します。外部形式をドメインへ持ち込みません。
分ける判断
境界を置く価値があるのは、重要な業務ルールを外部技術の変更から守りたい場所です。
- DBや外部APIをテスト用実装へ置き換えたい
- 業務ルールと入出力処理が混ざり、変更理由が増えている
小さなCRUDへ一律に層を作ると、変換だけのコードが増えます。層の数ではなく、依存方向と変更理由で判断します。
まとめ
- 業務ルールを内側、DBやUIを外側に置く
- コードの依存は外側から内側へ向ける
- Use Caseはアプリの操作、Adapterは内外の形式変換を担当する
- 小さな処理まで機械的に多層化しない
業務モデルはドメイン駆動設計(DDD)、実装方法は依存性注入(DI)入門で扱います。