프로젝트 설계시 DDD

0️⃣1️⃣·2024년 2월 9일
0

DDD

목록 보기
7/22

ENTITY와 VALUE OBJECT의 구분

  • 두 객체가 존재할 때, 똑같은 속성을 가지고 있을 때 구분이 필요하지 않으면 VALUE OBJECT

  • 객체 자체가 명확하게 식별성을 가져서 ENTITY로 구분할 수도 있음 (사람, 화물 번호)

  • 두 객체가 동일한 속성값을 가진다고 가정했을 때, 두 객체가 구분되어야 한다면 ENTITY가 될 수 있음

AGGREGATE의 경계

  • 자체적인 식별성이 존재하는 것은 자체적인 AGGREGATE의 루트가 되어야 한다.

  • 특정 AGGREGATE의 루트가 없이 존재하지 않는 개념들이 있다면, 같은 AGGREGATE로 분류될 수 있다.

  • ENTITY가 두 개의 AGGREGATE에 모두 걸쳐있다면, 별도의 AGGREGATE로 추출되어서 자체적인 AGGREGATE의 루트가 되어야 한다.

  • AGGREGATE의 루트와 관련된 엔티티에 관한 작업(삽입, 수정, 삭제)에서 경합이 발생할 수 있는데, 경합을 해소하기 위한 이유로 내부 ENTITY를 다른 AGGREGATE로 분류할 수 있다.

Repository

두 개의 AGGREGATE가 1:N 연관관계가 존재할 때, N에 입장에서는 새로운 ENTITY가 발생하면, 1의 AGGREGATE에 추가되어야 한다. 이 순간에 1의 AGGREGATE에 대한 경합이 발생할 수 있다.

이 경우 해결책으로, N의 AGGREGATEREPOSITORY를 추가하여 직접 저장할 수 있도록 하고, 1의 AGGREGATE에서는 질의를 통해서 N 컬렉션을 반환하는 형태로 구성할 수 있다. 두 AGGREGATE는 더 이상 경합을 겪지 않을 수 있다.

추가적으로, AGGREGATEAGGREGATE 루트를 통해서만 접근이 가능해야 하는 측면에서도 경합이 발생하는 구조는 옳지 않아보인다.

0개의 댓글