業務ロジックはドメインオブジェクトに書く
ルール
業務上の計算・判断・バリデーションは、そのデータを保有するドメインオブジェクトのメソッドとして実装する。 サービス層(ApplicationService / UseCase)は「誰を呼ぶか」のオーケストレーションのみとし、業務判断を持たない。
理由
サービス層に業務ロジックを書くと:
- 同じ判断が複数のサービスに重複する
- ドメインオブジェクトがデータの入れ物になり、変更箇所の特定が困難になる
- ユニットテストがサービス層の結合テストになってしまう
例外
複数の集約をまたぐ処理(例:注文と在庫の整合性)は、特定のドメインオブジェクトに属さないためサービス層に置く。ただしその場合も各集約のドメインオブジェクトへできる限り委譲する。
出典
現場で役立つシステム設計の原則(増田亨)第3〜4章