ページ一覧を開く

Domain Service

Domain Serviceとは

Domain Serviceは、重要な業務上の操作でありながら、特定のEntityやValue Objectの責務として自然に置けない振る舞いを表すドメインモデルの要素です。

Domain Serviceはいつ使う?

推奨

重要なドメイン操作が一つのEntityやValue Objectに自然に属さない場合に限って使う。

なぜ

無理に一つのEntityへ置くより意味が明確になりますが、使いすぎるとデータと振る舞いが分離した貧血ドメインモデルになります。

判断基準

  • 複数のドメインオブジェクトが関与する
  • 操作自体がドメインの語彙である
  • アプリケーションの手順やI/Oではない

BAD

Orderの全ロジックをOrderServiceへ移し、Orderをgetter/setterだけにする。

GOOD

複数口座間の振替可否を判定するTransferPolicy。

図:AGGREGATEの変更経路

外部のユースケース

変更を依頼する

AGGREGATE BOUNDARY

Aggregate Root

不変条件を守る入口

Entity

同一性で追跡する

Value Object

値で等価性を決める

外部は内部オブジェクトを直接変更せず、Aggregate Rootへ意図のある操作を依頼します。Rootが全体のルールを確認してから変更します。