Domain Driven Design으로써 소프트웨어를 설계하는 하나의 방법으로 볼 수 있다.

도메인을 중심에 놓고 도메인 모델 설계에 집중하는 방식이다.

image-20200312-191039.png

  1. 표현 영역 ( Web에서는 Http 프로토콜 )
    1. 어플리케이션에서 요청을 응용 영역이 필요로 하는 형식으로 변환 후 전달
    2. 응용 영역의 응답을 표현 영역이 이해 가능한 형태로 변환 후 전달
  2. 응용 영역 ( Application Service )
    1. 시스템이 사용자에게 제공해야 할 기능을 구현
    2. 도메인 영역의 모델을 이용한다.
  3. 도메인 영역 ( Domain, Domain Service )
    1. 도메인 모델, 리포지토리, 도메인 서비스가 구현되어 있음
    2. 핵심 로직을 이곳에서 구현한다.
  4. 인프라스트럭처
    1. 실제 저장소에 관한 구현 기술을 다룬다.
    2. RDBMS, MQ, No-Sql DB 와 같은 미들웨어와의 연결이 중점이다.
  1. 엔티티
    1. 거의 모든 경우에 식별자(유니크 ID) 를 가진다.
    2. 후에 기술한 애그리거트 루트일 가능성이 높다.
    3. 도메인의 기능을 제공한다. ( JPA의 엔티티와는 다르다! )
  2. 밸류
    1. 개념적으로 완전한 하나를 표현 할 때 사용한다. ( ex: 주소 = 시 + 군/구 + 상세 주소 )
    2. 일반적으로 데이터 변경 기능을 제공하지 않는다. ( 불변 객체 )