의존성 역전
인커밍 어댑터는 애플리케이션 서비스에 의해 구현된 인터페이스인 전용 포트를 통해 애플리케이션 계층과 통신한다.
여기서 왜 어댑터와 유스케이스 중간에 간접 계층을 넣어야 할까? 애플리케이션 코어가 외부 세계와 통신할 수 있는 곳에 대한 명세가 포트이기 때문이다.
→ 여기에 대한 이야기는 11장에서 더 하기로 한다.
웹 어댑터의 책임
- Http 요청을 자바 객체로 매핑.
- 파라미터와 콘텐츠를 객체로 역직렬화 한다.
- 권한 검사
- 입력 유효성 검증
- 유스 케이스 입력 모델은 유스케이스의 맥락에서 유효한 입력만 허용해야 한다.
- 웹어댑터의 입력모델과 유스케이스의 입력 모델과는 또 다른 유효성 검증을 해야한다.
- 웹 어댑터의 입력 모델을 유스케이스의 입력 모델로 변환할 수 있다는 것을 검증해야 한다.
- 입력을 유스케이스의 입력 모델로 매핑
- 유스케이스 호출
- 유스케이스의 출력을 HTTP로 매핑
- HTTP 응답을 반환
컨트롤러 나누기
웹 어댑터는 한 개 이상의 클래스로 구성해도 된다. 각 컨트롤러가 가능한 한 좁고 다른 컨트롤ㄹ러와 가능한 한 적게 공유하는 웹 어댑터 조각을 구현해야 한다.
계좌 리소스와 관련된 모든 것이 하나의 클래스에 모여 있는 게 괜찮을까?
단점은 다음과 같다.
- 클래스마다 코드는 적을 수록 좋다. 보기 힘들다.
- 테스트 코드 파악이 어렵다. 특정 프로덕션 코드에 해당 하는 테스트 코드를 찾기 쉽게 만들어야 한다.
- 데이터 구조의 재활용을 촉진한다. 즉, 계좌 리소스에서는 모든 연산에서 필요한 데이터를 담는 통 역할을 하게 되어, 불필요한 정보 포함이 생길 수 있다.
컨트롤러를 나누면 장점은 다음과 같다.
- 컨트롤러에 맞는 모델을 새로 만들게 될 확률이 높다.
- 컨트롤러 명과 서비스명에 대해서도 의미를 드러낼 수 있는 단어 채택을 할 수 있다.
유지 보수 가능한 소프트웨어를 만드는데 어떻게 도움이 될까?
웹 어댑터에서는 애플리케이션, 도메인 로직을 수행하지 않도록, HTTP 요청을 변환하는 역할 을 해야한다.
애플리케이션 계층은 Http 와 관련된 작업을 하면 안된다.
'책 일지 > 만들면서 배우는 클린 아키텍쳐' 카테고리의 다른 글
8장 경계 간 매핑하기 (0) | 2024.01.09 |
---|---|
6장 영속성 어댑터 구현하기 (0) | 2024.01.07 |
4장 유스케이스 구현하기 (1) | 2024.01.07 |
3장 코드 구성하기 (0) | 2024.01.07 |
2장 의존성 역전하기 (0) | 2024.01.01 |