응용 서비스와 표현 영역
사용자에게 기능을 제공하려면 도메인과 사용자를 연결해 줄 표현 영역과 응용 영역이 필요하다.
응용 서비스
- 주요 역할은 도메인 객체를 사용해서 사용자의 요청을 처리하는 것이다.
- 응용 서비스는 주로 도메인 객체 간의 흐름을 제어하기 때문에 단순한 형태를 같는다.
- 응용 서비스가 도메인 로직을 일부 구현하면 코드 중복, 로직 분산 등 코드 품질에 안 좋은 영향을 줄 수 있다.
- 만약 도메인 로직을 응용 서비스에서 구현하게 된다면
- 코드의 응집성이 떨어진다.
- 여러 응용 서비스에서 동일한 도메인 로직을 구현할 가능성이 높아진다.
- 응용 서비스를 구현하는 2가지 방법
- 한 응용 서비스 클래스에 도메인의 모든 기능 구현
- 구분되는 기능별로 응용 서비스 클래스를 따로 구현
- 응용 서비스의 파라미터 타입을 결정할 때 주의할 점은 표현 영역과 관련된 타입을 사용하면 안 된다는 점이다. 표현 영역의 타입을 응용 서비스에서 사용할 경우 표현 영역의 역할을 응용 서비스에서 하게될 수 있다.
표현 영역
표현 영역의 역할은 간단하게 말하면 사용자와 상호작용 하는 것이다. 인터페이스 같은 느낌으로도 생각해볼 수 있다.
- 표현 영역의 책임
- 사용자가 시스템을 사용할 수 있도록 흐름(화면)을 제공하고 제어한다.
- 사용자의 요청을 알맞은 응용 서비스에 전달하고 결과를 사용자에게 제공한다.
- 사용자의 세션을 관리한다.
- 만약 한줄 정도로 끝나는 단순한 조회 쿼리 같은 경우 응용 서비스에서 repository를 호출할 필요 없이 바로 표현 영역에서 호출하여도 괜찮다.
값 검증과 권한 검사
- 원칙적으로 모든 값에 대한 검증은 응용 서비스에서 처리한다. 하지만 아래 처럼 역할을 나누어서 생각해볼 수 있다.
- 표현 영역: 필수 값, 값의 형식, 범위 등을 검증한다.
- 응용 서비스: 데이터의 존재 유무와 같은 논리적 오류를 검증한다.
- 권한 검사는 보통 다음 세 곳에서 수행한다.
- 표현 영역에서는 할 수 있는 기본적인 검사는 인증된 사용자인지 아닌지 검사하는 것이다.