Layered Architecture
- SoC를 아키텍처 레벨에서 가능하게 해주는 패턴
- 계층을 나누어 각 계층의 관심사에 집중할 수 있도록 한다.
- 일반적으로 사용자 인터페이스, 응용, 도메인, 인프라스트럭쳐 계층이 있다.
도메인 모델 빌딩블럭
엔티티(Entity)
- 어떤 객체를 일차적으로 해당 객체의 식별성으로 정의
- 객체의 생명주기 내내 이어지는 추상적인 연속성
- 엔티티의 속성 보다는 정체성에 초점
Value Object
- 개념적 식별성을 갖지 않으면서 도메인의 서술적 측면을 나타내는 객체
- 모델에 포함된 어떤 요소의 속성에만 관심
- 불변적
- 객체의 수가 많아질 수 있으므로 객체를 고유하여 최적화 가능
Service
- 모델에서 독립적인 인터페이스로 제공되는 연산
- 다른 객체와의 관계를 강조
- 연산의 명칭은 Ubiquitous language에 도입되어야 함
- 매개변수와 결과는 도메인 객체여야 함
- 도메인 계층에서만 이용되는 것은 아님
- 각 계층의 서비스와 도메인 서비스를 적절하게 나누는 것이 중요 함
Module
- 패키지
- 일련의 응집력있는 개념
- 모듈의 이름은 도메인에 통찰력을 줄 수 있어야 함
도메인 객체의 생명주기
도메인객체의 관리 문제
- 생명주기 동안의 무결성 유지하기
- 생명주기 관리의 복잡성으로 모델이 난해해지는 것을 방지하기
해결방법
Aggregate
- 소유권과 경계를 명확히 정의하여 객체 간의 연관관계가 복잡해지지 않도록 한다
- 도메인 객체의 무결성 유지에 중요 함
- 생명주기의 전 단계에서 불변식이 유지돼야 할 범위를 표시
Factory
- 생명주기의 초기단계
- 복잡한 객체와 Aggregate를 생성하고 재구성
Repository
- 생명주기의 중간과 마지막
- 영속 객체를 찾아 조회하는 수단
Aggregate
- root와 boundary
- boundary : 무엇이 포함되고 무엇이 포함되지 않는지 정의
- root : 단 하나만 존재, 특정 엔티티
- 경계 바깥의 객체는 해당 Aggregate의 구성요소 가운데 root 만 참조 가능
- 불변식 : 데이터가 변경될 때마다 유지돼야 하는 일관성 규칙
- 구현 규칙
- 루트 엔티티는 전역 식별성을 지니며 불변식을 검사할 책임이 있다
- 루트는 Value Object의 복사본을 단른 객체에 전달해 줄 수 있다
- 삭제 연산은 경계안의 모든 요소를 한번에 제거해야 한다.
- 변경시 전체 불변식은 반드시 지켜져야 한다
전역식별성
지역식별성