Domain Driven Design

DDD에서 소개하는 전술 패턴을 사용하면 도메인 영역에 도메인 로직을 집중시키는데 도움이 된다.

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

전술패턴 외에도 바운디드 컨텍스트는 도메인 간 경계를 설정해줌.