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