6.1 표현 영역과 응용 영역
표현 영역 : 사용자의 요청을 해석한다.
응용 서비스 : 실제 사용자가 원하는 기능을 제공한다.
- 사용자가 웹 브라우저를 사용하는지 REST API를 호출하는지, TCP 소켓을 사용하는지를 알 필요가 없다.
6.2 응용 서비스의 역할
- 도메인 객체를 사용해서 사용자의 요청을 처리하는 것이므로 표현 영역 입장에서 보았을 때 응용 서비스는 도메인 영역과 표현 영역을 연결해주는 창구 역할을 한다.
도메인 로직을 도메인 영역과 응용 서비스에 분산해서 구현하면 코드 품질에 문제가 발생한다.
- 코드의 응집성이 떨어짐 → 도메인 로직을 파악하기 위해 여러 영역을 분석해야 한다.
- 여러 응용 서비스에서 동일한 도메인 로직을 구현할 가능성이 높아진다.
→ 결과적으로 코드 변경을 어렵게 만든다. → 소프트웨어의 가치가 떨어진다.
6.3 응용 서비스의 구현
응용 서비스의 크기
- 한 응용 서비스 클래스에 회원 도메인의 모든 기능 구현하기
- 동일 로직에 대한 코드 중복을 제거할 수 있음
- 한 서비스 클래스의 크기가 커짐
- 구분되는 기능별로 응용 서비스 클래스를 따로 구현하기
- 클래스의 개수는 많아짐
- 한 클래스에 관련 기능을 모두 구현하는 것과 비교해서 코드 품질을 일정 수준으로 유지하는데 도움이 된다.
- 각 클래스별로 필요한 의존 객체만 포함하므로 다른 기능을 구현한 코드에 영향을 받지 않는다.
응용 서비스의 인터페이스와 클래스
- 응용 서비스는 런타임에 교체하는 경우가 거의 없고 한 응용 서비스의 구현 클래스가 두개인 경우도 드물다.
- 인터페이스가 명확하게 필요하기 전까지는 응용 서비스에 대한 인터페이스를 작성하는 것이 좋은 선택은 아니다.
응용 서비스는 표현 영역에 의존하면 안됨
트랜잭션 처리해야 함
6.4 표현 영역
- 사용자가 시스템을 사용할 수 있는 흐름을 제공하고 제어한다.
- 사용자의 요청을 알맞은 응용 서비스에 전달하고 결과를 사용자에게 제공한다.
- 사용자의 세션을 관리한다.
6.5 값 검증
- 표현 영역과 응용 서비스 두 곳에서 모두 수행할 수 있다.
- 표현 영역 : 필수 값, 값의 형식, 범위 등을 검증
- 응용 서비스 : 데이터의 존재 유무와 같은 논리적 오류를 검증
6.6 권한 검사
- 보안 프레임워크에 대한 이해가 부족하면 프레임워크를 무턱대고 도입하는 것보다 개발할 시스템에 맞는 권한 검사 기능을 구현하는 것이 시스템 유지 보수에 유리할 수 있다.
- 표현 영역, 응용 서비스, 도메인에서 권한 검사를 수행할 수 있음
6.7 조회 전용 기능과 응용 서비스
- 서비스에서 수행하는 추가적인 로직이 없을뿐더러 단일 쿼리만 실행하는 조회 전용 기능이어서 트랜잭션이 필요하지도 않다. → 이 경우라면 굳이 서비스를 만들 필요 없이 표현 영역에서 바로 조회 전용 기능을 사용해도 문제가 없다.
- 즉 , 응용 서비스가 사용자 요청 기능을 실행하는데 별다른 기여를 하지 못한다면 굳이 서비스를 만들지 않아도 된다.