“CleanArchitecture 23장”
험블 객체 패턴
- 디자인 패턴
- ( 테스트 하기 어려운 행위 \ 테스트 하기 쉬운 행위 ) 를 단위 테스트 작성자가 분리하기 쉽게 하는 방법
- 행위를 두개의 모듈 또는 클래스로 나눔 -> 그 중 하나가 험블
- 테스트 하기 어려운 행위를 험블 객체로 옮기고, 나머지 모듈에는 테스트 하기 쉬운 행위를 옮김
프레젠터와 뷰
GUI 의 경우 험블 객체 패턴을 사용하여 프레젠터와 뷰로 나눌 수 있다.
뷰
- 험블객체
- 테스트 어려움
- 데이터를 GUI로 이동시키지만 직접 처리하지 않음
- 뷰 모델의 데이터를 화면에 로드하기만 함
프레젠터
- 테스트 하기 쉬운 객체
- 애플리케이션으로부터 데이터를 받아 화면에 표현할 수 있는 포맷으로 만드는 것이 목적
- 뷰는 그 데이터를 받아 화면으로 전달하는 간단한 일만 수행
테스트와 아키텍처
- 테스트 용이성
- 행위를 테스트 하기 쉬운 부분과 어려운 부분으로 분리하면 아키텍처 경계가 정의됨
- 프레젠터 / 뷰
데이터베이스 게이트웨이
- [ 유스케이스 인터랙터 / 데이터베이스 ] 사이에 위치
- 다형적 인터페이스
- 애플리케이션이 데이터베이스에 수행하는 생성, 조회, 갱신, 삭제와 관련된 모든 메서드 포함
- ex) UserGateway 인터페이스 의 getLastNamesOfUsersWhoLoggedInAfter 메서드
- 유스케이스 계층 -> 게이트웨이 인터페이스 호출
- 게이트웨이 인터페이스 구현체는 데이터베이스 계층에 위치 - 험블 객체
데이터 매퍼
ORM
- Object Relational Mapping
- 데이터베이스 계층에 위치
- 게이트웨이 인터페이스와 데이터베이스 사이의 험블 객체 경계를 형성
- ex) 하이버네이트, JPA
서비스 리스너
- 서비스 경계를 형성하는 험블 객체 패턴
결론
각 아키텍처 경계마다 경계 가까이 숨어 있는 험블 객체 패턴을 발견할 수 있다. 모두 간단한 데이터 구조를 수반하며, 테스트 용이성에 따라 분리될 것이다. 아키텍처 경계에서 험블 객체 패턴을 사용하면 전체 시스템의 테스트 용이성을 높일 수 있다.