클린 아키텍처
- 육각형 아키텍처
- data context and interaction(DCI)
- boundary-control-entity(BCE)
이들 아키텍처는 세부적인 면에서는 다소 차이가 있더라도 그내용은 상당히 비슷하다.
이들의 목표는 같은데 바로 관심사의 분리이다.
이들 아키텍처는 모두 시스템이 다음과 같은 특징을 지니도록 만든다.
- 프레임워크 독립성
- 테스트 용이성
- UI 독립성
- 데이터 베이스 독립성
- 모든 외부 에이전시에 대한 독립성
의존성 규칙
소스 코드 의존성은 반드시 안쪽으로, 고수준 정책을 향해야 한다.
엔티티
엔티티는 전사적인 핵심 업무 규칙을 캡슐화한다.
외부의 무언가가 변경되더라도 엔티티가 변경될 가능성은 지극히 낮다.
유스케이스
애플리케이션에 특화된 업무 규칙을 포함한다.
이 계층에서 발생한 변경이 엔티티에 영향을 줘서는 안 된다.
인터페이스 어댑터
일련의 어댑터들로 구성된다. MVC 아키텍처를 모두 포괄한다.
프레임워크와 드라이버
이 계층에서는 안쪽원과 통신하기 위한 접합 코드 외에는 특별히 더 작성해야 할 코드가 그다지 많지 않다.
원은 네 개여야만 하나?
꼭 네개일 필요는 없다 하지만 어떤 경우에도 의존성 규칙은 적용된다.
경계 횡단하기
제어흐름과 의존성의 방향이 명백히 반대여야 하는경우 대부분 의존성 역전 원칙을 사용하여 해결한다.
경계를 횡단하는 데이터는 어떤 모습인가
모든 데이터를 경계로 다 전달한다고 하면 해당 로우의 값을 모두 알아야 한다. 이러면 의존성 규칙을 위배하게 된다.
경계를 가로질러 데이터를 전달할 때 데이터는 항상 내부의 원에서 사용하기에 가장 편리한 형태를 가져야만 한다.