ドメインの概念をコードで表現しようとしたときに、値オブジェクトやエンティティでは違和感を感じることがある。このような違和感を別のオブジェクトとして定義すること

サービスとは

ソフトウェアの観点では、クライアントのために何かを行うオブジェクトである

DDDでは2つのサービスがある

ドメインサービスとは

値オブジェクトなどのドメインオブジェクトには振る舞いが記述される。

しかし、ドメインオブジェクトに記述すると不自然になってしまう振る舞いがある。

(例) ユーザの重複を確認する振る舞い. ここでは、重複を許さない

そこで、ドメインサービスとして別定義をする

class UserService {
	public bool Exists(User user){
		// 重複を確認する処理
	}
}

一見、便利なドメインサービスだが、振る舞いを移しすぎると

ドメインオブジェクトがただのデータを保存するだけの無口なオブジェクトになってしまう

ため、気をつけなくてはいけない