문제
계층형 아키텍처는 데이터베이스 주도 설계를 유도한다
ORM에 의해 관리되는 엔티티들은 일반적으로 영속성 계층에 두는데 계층은 아래 방향으로만 접근 가능하기 때문에 도메인 계층에서는 이러한 엔티티에 접근할 수 있다. 그리고 이러한 엔티티에 접근 가능하면 분명 사용되기 마련. ⇒ 영속성 계층과 도메인 계층 사이에 강한 결합이 생김!!
- 서비스는 영속성 모델을 비즈니스 모델처럼 사용하게 되고 이로 인해 도메인 로직뿐 아니라 즉시로딩/ 지연로딩, 데이터베이스 트랜잭션, 캐시 플러시 등등 영속성 계층과 관련된 작업들을 해야만 한다.
- 영속성 코드가 사실상 도메인 코드에 녹아들어가서 둘 중 하나만 바꾸는 것이 어려워진다.
- 이는 유연하고 선택의 폭을 넓혀준다던 계층형 아키텍처의 목표와 정확히 반대되는 상황임
지름길을 택하기 쉬워진다
테스트하기 어려워진다
유스케이스를 숨긴다
계층형 아키텍처는 도메인 서비스의 너비에 대한 규칙을 강제하지 않기에 여러 개의 유스케이스를 담당하는 아주 넓은 서비스가 만들어지기도 한다.