コンテンツにスキップ

ドメインオブジェクトが適切に抽象化され、アプリケーション層と適切に分離されているか?

Type: Structure
Category: ドメイン
Audience: 設計初心者 / 設計中のチーム / レビュワー


背景・概要

ドメインモデルは、業務ルールを正しく表現・保守しやすくする中核的存在

プレゼンテーションやアプリケーション層と混在せず、明確に分離・責務分担されていることが拡張性・変更耐性に直結する


  • Task, Document, UserRoleなどのドメインがアプリ層から独立している
  • ユースケース層(Application Service)がドメインサービスを利用して業務ロジックを実行
  • ドメイン層にだけ isOverdue, canApprove のような業務判断ロジックが存在する。また判断ロジックは振る舞いの中で使用するprivate関数が望ましい

よくある失敗例

  • フロントのDTOとドメインモデルが混在し、意図しない振る舞いを起こす
  • Application Serviceに「金額計算」「ステータス判断」などが記述され、再利用できない
  • ドメイン層がインフラ層のライブラリやDB型に依存しておりテスト不能

FAQ

Q. DTOやAPIモデルとは何が違う?

A. ドメインモデルは業務判断に必要な情報と振る舞いを持ち、表示や通信のための形には縛られないもの

Q. 小さいシステムでもドメイン層を分けるべき?

A. 将来の保守性やテスト性を考えると、最初から分離しておくと後で楽になるかな


関連観点