우리말로 도메인 주도 설계라고 해설할 수 있는데, 용어의 의미 그대로 도메인 위주의 설계 기법을 의미한다.
비즈니스적인 어떤 업무 영역과 관련이 있다
ex) 새로운 배달 주문 앱을 만들어야 한다면 고객과 음식점, 배달원, 그리고 카드사 또는 은행 등 배달 주문 앱을 구현하기 위해 필요한 업무들을 자세히 알면 알수록 퀄리티가 높은 애플리케이션을 만들 가능성이 높다.
고객이 음식을 주문하는 과정, 주문받은 음식을 처리하는 과정, 조리된 음식을 배달하는 과정 등의 도메인 지식(Domain Knowledge)들을 서비스 계층에서 비즈니스 로직을 구현해야 하는 것이다.
결론적으로, 도메인이란 용어 자체는 한 마디로 우리가 실제로 현실 세계에서 접하는 업무의 한 영역이다.
이걸 세분화 하면
이렇게 나타낼 수 있다.
애그리거트란 세분화한 그림과 같이 비슷한 업무 도메인들의 묶음을 말한다.
위 그림에서 애그리거트는 총 네 개가 된다.
편의상 회원 애그리거트, 주문 애그리거트, 음식 애그리거트, 결제 애그리거트라고 부를 수 있다.
세분화한 위 그림에서 애그리거트 안에는 1개 이상의 도메인들이 있는데, 각각 애그리거트에는 해당 애그리거트를 대표하는 도메인이 존재한다.
이처럼 하나의 애그리거트를 대표하는 도메인을 DDD에서는 애그리거트 루트(Aggregate Root)라고 한다.
어떤 특정 집단이나 그룹의 대표라고 생각하면 이해가 조금 더 수월하다.
회원 애그리거트의 경우, '회원 포인트'가 얼마인지 알려면 해당 포인트를 가지는 '회원 정보'를 알아야한다. 즉, '회원 정보' 도메인이 애그리거트 루트가 된다.
주문 애그리거트의 경우, '주문 정보'가 다른 도메인과 직접적으로 관련이 있다. 즉, '주문 정보' 도메인이 애그리거트 루트가 된다.
데이터 베이스의 테이블 간 관계로 보면, 애그리거트 루트는 부모 테이블이 되고, 애그리거트 루트가 아닌 다른 도메인들은 자식 테이블이 되는 셈이다.
애그리거트 루트의 기본키 정보를 다른 도메인들이 외래키 형태로 가지고 있다고 볼 수 있다.
List<Order>
가 추가되었다.List<OrderCoffee>
를 멤버 변수로 추가했다.DDD(Domain Driven Design, 도메인 주도 설계)는 도메인 위주의 설계 기법이다.
**도메인(Domain)이란?
애그리거트(Aggregate)와 애그리거트 루트 (Aggregate Root)는 DDD에서 사용되는 용어이다.
데이터베이스 테이블 간의 관계는 외래키를 통해 맺어지지만 클래스끼리 관계는 객체의 참조를 통해 관계가 맺어진다.