하나의 애그리거트로 처리할 수 없는 기능들이 존재한다.

이럴 때는 어떤 애그리거트에서 책임을 가져야할까?

도메인 서비스

도메인 서비스는 도메인 영역에 위치한 도메인 로직을 표현할 때 사용한다.

도메인 서비스는 상태 없이 로직만 구현한다.

한 도메인에서 처리하기 힘든 로직을 도메인 서비스에서 처리한다.

ex)

public class TransferService {

	public void transfer(Account from, Acount to, Money amounts) {
		from.withdraw(amounts);
		to.credit(amounts);
	}
}

위처럼 Account라는 도메인 내에서 직접 처리할 수 없는 로직을 새로운 도메인 서비스를 만들어서 처리한다.

도메인 서비스는 도메인과 같은 패키지에 위치하게 된다.

도메인 서비스는 도메인 로직을 표현하기 때문이다.

외부 시스템을 이용할 때는 도메인 패키지에 인터페이스를 두고, 실제 구현은 인프라스트럭쳐 영역에 위치시킨다.