[DDD] 애그리거트 -4
·
📚 개발자의 서재/도메인 주도 개발 시작하기
해당 포스팅은 최범균 작가님의 도메인 주도 개발 시작하기 (P.121~127)를 읽고 정리한 글입니다. 애그리거트 간 집합 연관애그리거트 간 1-N과 M-N 연관은 컬렉션을 이용해 표현할 수 있으며, 대표적인 예로 카테고리와 상품 간의 관계를 들 수 있다. 카테고리 입장에서 보면 하나의 카테고리에 여러 개의 상품이 속할 수 있으므로 1-N 관계이며, 한 상품이 하나의 카테고리에만 속한다면 이는 N-1 관계가 된다. 1-N 관계는 Set과 같은 컬렉션을 이용하여 모델링할 수 있다. 예를 들어, Category가 연관된 Product들을 값으로 갖는 컬렉션을 필드로 정의하는 방식이다. 그러나 개념적으로 1-N 관계가 존재한다고 하더라도, 이를 그대로 구현에 반영하는 것이 항상 요구사항을 충족시키는 것은 아..
[DDD] 애그리거트 -3
·
📚 개발자의 서재/도메인 주도 개발 시작하기
해당 포스팅은 최범균 작가님의 도메인 주도 개발 시작하기 (P.114~120)를 읽고 정리한 글입니다. ID를 이용한 애그리거트 참조한 객체가 다른 객체를 참조하는 것처럼 애그리거트도 다른 애그리거트를 참조한다. 애그리거트 관리 주체는 애그리거트 루트이므로 애그리거트에서 다른 애그리거트를 참조한다는 것은 다른 애그리거트의 루트를 참조한다는 것과 같다. 애그리거트 간의 참조는 필드를 통해 쉽게 구현할 수 있다. 이 방법은 개발자에게 구현의 편리함을 제공하지만 다음과 같은 문제를 야기할 수 있다. 편한 탐색 오용한 애그리거트 내부에서 다른 애그리거트 객체에 접근할 수 있으면 다른 애그리거트의 상태를 쉽게 변경할 수 있게 된다. 한 애그리거트에서 다른 애그리거트의 상태를 변경하는 것은 애그리거트 간의 의존 ..
[DDD] 애그리거트 -2
·
📚 개발자의 서재/도메인 주도 개발 시작하기
해당 포스팅은 최범균 작가님의 도메인 주도 개발 시작하기 (P.107~113)를 읽고 정리한 글입니다. 애그리거트 루트애그리거트 루트의 기능 구현애그리거트 루트는 애그리거트 내부의 다른 객체를 조합해서 기능을 완성한다. 예를 들어 Order는 총 주문 금액을 구하기 위해 OrderLine 목록을 사용한다.public class Order{ private Money totalAmounts; private List orderLines; private void calculateTotalAmounts(){ int sum = orderLines.stream() .mapToInt(o1 -> o1.getPrice() * o1.getQuantity()) .s..
[DDD] 애그리거트 -1
·
📚 개발자의 서재/도메인 주도 개발 시작하기
해당 포스팅은 최범균 작가님의 도메인 주도 개발 시작하기 (P.98~107)를 읽고 정리한 글입니다. 애그리거트도메인 객체 모델이 복잡해지면 개별 구성요소 위주로 모델을 이해하게 되고 전반적인 구조나 큰 수준에서 도메인 간의 관계를 파악하기 어려워진다. 관계를 파악하기 어렵다는 것은 코드를 변경하고 확장하는 것이 어려워진다는 것을 의미한다. 복잡한 도메인을 이해하고 관리하기 쉬운 단위로 만들려면 상위 수준에서 모델을 조망할 수 있는 방법이 필요한데, 그 방법이 바로 애그리거트다. 애그리거트는 관련된 객체를 하나의 군으로 묶어준다. 애그리거트는 모델을 이해하는데 도움을 줄 뿐만 아니라 일관성을 관리하는 기준도 된다. 모델을 보다 잘 이해할 수 있고 애그리거트 단위로 일관성을 관리하기 때문에, 애그리거트..
[DDD] 아키텍처 개요 -3
·
📚 개발자의 서재/도메인 주도 개발 시작하기
해당 포스팅은 최범균 작가님의 도메인 주도 개발 시작하기 (P. 80~89)를 읽고 정리한 글입니다. 도메인 영역의 주요 구성 요소도메인 영역의 모델은 도메인의 주요 개념을 표현하며 핵심 로직을 구현한다. 도메인은 아래 표에 나와 있는 것처럼 여러 구성 요소로 이루어져 있다.요소설명엔티티(ENTITY)고유 식별자를 갖는 객체로 자신의 라이프 사이클을 갖는다. 도메인의 고유한 개념을 표현하며, 도메인 모델의 데이터를 포함하며 해당 데이터와 관련된 기능을 제공한다.밸류(VALUE)고유의 식별자를 갖지 않는 객체로 주로 개념적으로 하나인 값을 표현할 때 사용된다. 엔티티의 속성으로 사용할 뿐만 아니라 다른 밸류 타입의 속성으로도 사용할 수 있다.애그리거트(AGGREGATE)연관된 엔티티와 밸류 객체를 개념적..