01. 계층형 아키텍처의 문제
- 데이터베이스 주도 설계 유도
- 테이블부터 만들고 도메인 로직 구현
- 의존성의 방향에 따라 영속성계층이 가장 안쪽에 위치하기 때문에
- ORM을 사용하는 경우 데이터베이스의 엔티티를 사용하기 쉬워짐
- 영속성게층이 비대해짐
- 가장 안쪽의 레이어에 접근가능하다보니 상위 계층을 접근해야할때 이를 단순히 내려버림
- 유스케이스를 숨긴다
- 도메인 로직이 여러 계층에 걸쳐 흩어지기 쉬움
- 도메인 서비스의 너비가 넓어짐
- 여러 영속성 계층에 의존 및 웹 레이어로 부터 많은 호출을 받음
- 동시 작업이 어려움
02. 의존성 역전하기
- 클린아키텍쳐
- 계층 간의 모든 의존성이 안쪽(도메인)으로 향해야 함
- 계층 마다 엔티티에 대한 모델을 각기 갖고 이를 변환해야한다
- 육각형 아키텍처(port와 adaptor 아키텍처)
03. 코드
- 계층형 ? 서로 연관되지 않은 기능들끼리 예상하지 못한 부수효과
- 기능 ? 가시성
- 표현력 있는 패키지 구조 ?
- adaptor, domain, appliation
- 패키지가 달라서 접근제어자를 public ?
- 의존성 역전
- 서비스가 persistance adaptor를 직접 호출하지 않고, application 계층에 out port interface를 두어 이를 호출, 해당 인터페이스는 persistance adaptor로 하여금 실체화하게 하여 외부 어댑터에 대한 의존성을 역전한다.
04. 유스케이스 구현하기
- 유스케이스는 비즈니스 규칙을 검증할 책임이 있고 도메인 엔티티와 이 책임을 공유한다.
- 입력 유효성 검증