외부 시스템, 타 도메인과의 연동 기능 -> 도메인 서비스라 할 수 있다.
설문 조사 시스템과, 사용자 역할 관리 시스템이 분리되어 있다고 가정하자. 설문 조사 시스템은 설문 조사 생성 시 사용자의 생성 권한을 확인하기 위해 사용자 역할 관리 시스템과 연동해야 한다. 이때 설문 조사 도메인 입장에서는 사용자가 설문 조사 생성 권한을 가졌는지 확인하는 도메인 로직으로 볼 수 있다.
이때 설문 조사의 입장, 즉 도메인 로직이라는 관점에서 인터페이스를 구현한다. 상위 모듈의 정책 입장에서 추상화 하는 것과 같은 맥락.
public interface SurveyPermissionChecker {
boolean hasUserCreationPermission(String userId);
}
public class CreateSurveyService {
private final SurveyPermissionChecker permissionChecker;
public Long createSurvey(CreateSurveyRequest request) {
validate(req);
if (!permissionChecker.hasUserCreationPermission(request.getUserId())) {
throw new NoPermissionException();
}
// ...
}
}
응용 서비스 CreateSurveyService
가 도메인 서비스 SurveyPermissionChecker
를 이용하여 설문 조사 생성 권한을 검사한다.