Domain Driven Design
DDD에서 소개하는 전술 패턴을 사용하면 도메인 영역에 도메인 로직을 집중시키는데 도움이 된다.
| 구성 요소 | 설명 |
|---|---|
| Entity | 각 엔티티 객체는 고유의 식별자 가지며, 각 엔티티는 식별자로 구분됨. 내부 상태가 바뀌어도 식별자는 불변. 예를 들어 주문 엔티티는 서로 다른 주문번호를 식별자로 가진다. |
| Value | 밸류는 고유 식별자 없으며 개념적인 값 표현. 금액, 배송 주소 같은 값. 값은 불변으로 하는것 추천. |
| Aggregate | 애그리거트는 관련된 객체를 묶어 하나의 개념적인 단위로 표현. 예를 들어 주문 애그리거트는 Order Entity, OrderLine Value 집합, ShippingAddress Value로 구성될 수 있다. 애그리거트는 모델의 일관성을 처리하는 단위. |
| Repository | 도메인 객체를 물리적인 저장소와 연결할때 사용하는 모델이 레포지토리. 도메인 객체를 저장하고 조회할 때 사용되는 인터페이스를 제공함. 리포지토리는 애그리거트 단위로 존재한다. |
| Domain Service | 특정한 애그리거트에 속하지 않은 로직을 구현. 외부 연동이 필요한 도메인 로직도 도메인 서비스로 사용해서 표현 |
| Domain Event | 도메인 내에서 발생한 이벤트 표현. 도메인의 상태가 변경될 때 도메인 이벤트가 발생함. 도메인 이벤트는 주로 다른 부분에 변화를 알리기 위해 사용된다. |
| DDD는 도메인 로직을 애그리거트 단위로 묶는다. 복잡한 모델을 애그리거트 단위로 관리할 수 있게하여 복잡도 낮추고, 애그리거트에 관련 로직 모아 응집도 높인다. |
전술패턴 외에도 바운디드 컨텍스트는 도메인 간 경계를 설정해줌.