애그리거트
- 애그리거트는 관련된 객체를 하나의 그룹으로 묶어주는 단위
주문
(루트 애그리거트)주문서
주문자
주문배송정보
- 이를 통해 복잡한 도메인 모델을 상위 수준에서 쉽게 이해하고 관리가 가능해진다.
개별 객체와 상위 수준의 모델의 관계성
- 상세 모델의 복잡성의 문제
- 개별 객체 단위로 모델을 바라보면,
- 상위 수준에서의 관계를 파악하기 어려워진다.
- 이는 코드 변경과 확장을 어렵게 만들며, 전체 모델을 이해하지 못한 상태에서의 코드 수정은 장기적으로 문제를 야기할 수 있습니다.
- 예를 들어, 상위 수준에서 도메인 모델을 정리할 수 있다면, 주요 엔티티 간의 관계를 쉽게 파악할 수 있다.
- 주문은
- 회원, 상품, 결제와 관련이 있다는 것을 상위 수준의 모델에서 확인할 수 있다.
- 주문은
애그리거트의 생애주기
- 객체의 라이프사이클
- 한 애그리거트에 속한 객체들은 유사하거나 동일한 라이프사이클을 갖는다.
- 예를 들어, 주문 애그리거트에 속한 객체들은 함께 생성되고 제거됩니다.
- 주문자
- 주문주소
- 주문번호 밸류타입 등.
애그리거트 경계 중요성
- 경계의 설정
- 애그리거트는 각각 독립적임.
- 각 애그리거트는 자신을 관리하고, 다른 애그리거트를 관리하지 않는다.
- 도메인규칙등에 따라 달라질 수 있기에, 위 사항은 상황에 따라 다르긴함.
애그리거트의 크기 조정
- 도메인에 대한 이해가 깊어질수록 애그리거트의 실제 크기는 줄어들며
- 대부분의 애그리거트는 한 개의 엔티티 객체만을 갖는 경우가 많다고 한다.
Order
// 애그리거트 루트 엔티티
public class Order {
private Long id;
private String orderNumber;
private List<OrderItem> items;
public Order(String orderNumber) {
this.orderNumber = orderNumber;
}
public void addItem(OrderItem item) {
items.add(item);
}
// 주문에 대한 다른 비즈니스 로직들...
}
OrderItem
// 애그리거트에 속한 엔티티
public class OrderItem {
private Long id;
private String productName;
private int quantity;
private double price;
public OrderItem(String productName, int quantity, double price) {
this.productName = productName;
this.quantity = quantity;
this.price = price;
}
// 주문 항목에 대한 다른 비즈니스 로직들...
}
Uploaded by N2T
'도메인주도개발' 카테고리의 다른 글
밸류 매핑 애그리거트 (0) | 2024.01.05 |
---|---|
Image 생성 관련 최적화 (0) | 2024.01.05 |
애그리거트 간의 참조 (0) | 2024.01.02 |
애그리거트를 팩토리를 사용하기 (0) | 2024.01.02 |
도메인 전문가와 개발자 간 지식 공유 (0) | 2023.12.30 |