# 애그리게이트 ## 애그리게이트란? - 애그리게이트에는 원소에 대한 접근을 캡슐화한 루트 엔티티(장바구니)가 있음 - 원소마다 고유한 정체성이 있지만 시스템의 나머지 부분은 장바구니를 나눌 수 없는 단일 객체처럼 참조해야 함 ## 애그리게이트 패턴 - [[DDD]] 커뮤니티에서 공유하는 설계 패턴 - 다른 도메인 객체들을 포함하며 이 객체 컬렉션 전체를 한꺼번에 다룰 수 있게 해주는 도메인 객체 - 애그리게이트에 있는 객체를 변경하는 유일한 방법은 애그리게이트와 그 안의 객체 전체를 불러와 애그리게이트가 지원하는 메서드를 호출하는 방뻐 - 관련 도메인을 하나의 군집으로 묶은 것 ## 애그리게이트 선택 - 애그리게이트 내부에서 다뤄야 하는 객체는 Batch - Shipment를 경계로 사용할 수도 있음 - 각 선적에는 여러 배치가 들어갈 수 있고 모든 배치는 동시에 창고로 전달 - Warehouse를 경게로 사용할 수도 있음 - 각 창고에는 여러 배치가 들어있고 모든 재고 수량을 동시에 파악하는 게 좋음 - Shipment, Warehouse 모두 DEADLY-SPOON, FLIMSY-DESK를 동시에 할당할 수 있지만 같은 창고 혹은 같은 선적에 포함되어 있어야 할당 가능하기 때문 - 주문 라인을 할당할 때는 주문 라인으로 같은 [[SKU]]에 속하는 배치에만 관심이 있음 - GlobalSkuStock 같은 개념 - 주어진 모든 SKU에 속한 모든 배치의 컬렉션 - 이름이 좋아 보이지 않아 아래 이름을 검토 후 최종 Product이라 부르기로 결정 - SkuStock, Stock, ProductStock 등