응용 서비스 구현
표현 영역의 역할
값 검증과 권한 검사
표현영역 : 사용자의 요청을 해석한다.
응용 서비스 : 사용자(클라이언트)가 요청한 기능을 실행한다.
응용 서비스는 사용자의 요청을 처리하기 위해 리포지터리로부터 도메인 객체를 구하고, 도메인 객체를 사용한다.
응용 서비스는 주로 도메인 객체 간의 흐름을 제어하기 때문에 다음과 같이 단순한 형태를 갖는다.
public Result doSomeFunc(SomeReq req) {
// 1. 리포지터리에서 애그리거트를 구한다.
SomeAgg agg = someAggRepository.fineById(req.getId());
checkNull(agg);
// 2. 애그리거트의 도메인 기능을 실행한다.
agg.doFunc(req.getValue());
// 3. 결과를 리턴한다.
return createSuccessResult(agg);
}
public Result doSomeCreation(CreateSomeReq req) {
// 1. 데이터 중복 등 데이터가 유효한지 검사한다.
checkValid(req);
// 2. 애그리거트를 생성한다.
SomeAgg newAgg = createSome(req);
// 3. 리포지터리에 애그리거트를 저장한다.
someAggRepository.save(newAgg);
// 4. 결과를 리턴한다.
return createSuccessResult(newAgg);
}
응용 서비스의 역할
- 객체 간의 실행 흐름 제어
- 트랜잭션 처리
- 접근 제어
- 이벤트 처리
도메인 로직이 응용 서비스에 생기면 발생하는 문제
-> 응집도가 떨어짐, 코드의 중복이 발생.
인터페이스가 필요한 상황
- 구현 클래스가 여러개인 경우
- 런타임에 구현 객체를 교체해야 할 경우
컨트롤러 -> 표현계층
서비스 -> 응용계층
'책' 카테고리의 다른 글
[DDD START!] 2장 아키텍처 개요 (0) | 2020.07.04 |
---|---|
[DDD START!] 1장 도메인 모델 시작 (0) | 2020.07.04 |
[모던 자바 인 액션] 1장 (0) | 2020.06.26 |
5장. 리포지터리의 조회 기능(JPA 중심) (0) | 2020.06.24 |
[DDD START!] 4장. 리포지터리와 모델구현(JPA 중심) (0) | 2020.06.21 |