ドメインサービス
クライアント
のために何かを行う
オブジェクト
ValueObject
や
エンティティ
に記述すると不自然になる振る舞いを記述する.
UserId
の重複確認など.
User
が持つと
user.Exists()
と書いたり,
checkObject.Exists(user)
と書いたりして不自然になる.
code:Check.cs
var userService = new UserService();
var user = new User();
bool duplicated = userService.Exists(user); // 自然な記述
重複確認が
ドメイン
からの要望であれば
ドメインサービス
に書くが,
アプリケーション
の要望であれば
アプリケーションサービス
に記述する.
物流
における
物流拠点
は
エンティティ
だが,
輸送
の操作は
ドメインサービス
が良さそう.
複数の
ドメインオブジェクト
を横断するような操作.
ドメインサービス
に全てを記述しないように注意する.
ドメインオブジェクト
が持てる振る舞いは
ValueObject
に持たせる.
迷ったら
ドメインオブジェクト
に定義する.
ドメインオブジェクト
が振る舞いを一切持たず,
自己文書化
をなしていない状態を
ドメインモデル貧血症
と呼ぶ.