juniors-dev-study / domain-driven-design

1 stars 0 forks source link

6장 도메인 객체의 생명주기 #6

Closed y2o2u2n closed 3 years ago

chanhyeong commented 3 years ago

Aggregate

데이터의 변경 단위로 다루는 연관 객체의 묶음, root + boundary

image

image

Rule

  1. root entity - Global Identity + responsible for checking invariants (불변함을 검사할 책임)
  2. entities in boundary - Local Identity. Aggregate 내에서만 unique
  3. Aggregate 외부에서는 root entity 를 제외한 내부 구성요소를 참조할 수 없다
    • 내부 entity 참조 전달은 가능하지만 일시적으로만 사용해야 한다
    • value object 사본 전달은 상관 없음
    • db query 시 root 만 직접 획득 -> 다른 객체는 모두 aggregate 를 탐색
  4. aggregate 내 객체는 다른 aggregate 의 root 만 참조할 수 있음
  5. 삭제 연산은 aggregate 에 속한 모든 요소를 한 번에 제거해야 함

Factory

aggregate 생성이 복잡해지거나 내부 구조를 너무 많이 드러내는 경우 -> 캡슐화

복잡한 객체 조립 과정을 캡슐화 + 클라이언트가 인스턴스화되는 객체의 구현(concrete) 클래스를 참조할 필요가 없는 인터페이스 제공

형태

factory method, abstract factory, builder

Invariant logic 의 위치

Factory 는 이미 내부 구조를 알고 있고, 구현과 밀접하게 관련이 있으므로 Invariant logic 를 factory 에 두어서 생성물의 복잡한 요소를 줄이는 것도 이점

불변식은 무엇인지 ❓

Repository

ENTITY, VALUE 를 탐색하기 위한 진입점

DDD 의 목표는 기술보다는 도메인에 대한 모델이 집중하는 건데

개발자가 SQL query 를 작성하여 query service 에 보내고 결과를 constructor or factory 에 전달한다면 => 모델에 집중하기 힘들어짐 => 객체를 query 를 통해 제공되는 데이터의 컨테이너로 여기게 됨 => 전체 설계가 데이터 처리 방식으로 나아감

Repository 는 특정 타입의 객체를 하나의 개념적 집합으로 나타낸다

Aggregate Root 에만 Repository 를 제공하고 모든 객체 저장과 접근은 Repository 에 위임 -> 클라이언트가 모델에 집중

구현 시

bearics commented 3 years ago

6장. 도메인 객체의 생명주기

image

도메인 객체의 관리에서 가장 중요한 점

위 사항을 유지하기 위한 스킬

기존 모델의 한계

  1. 개체 참조를 통해 얽히고 설킨 관계망을 가지고 있다
    • 복잡한 연관관계가 많으면 변경의 일관성을 보장하기 어렵다
    • 여러 클라이언트가 동시에 접근 시에도 문제
    • 이를 해결하기 위해서는 모델 근간부터 개선 필요

AGGREGATE

FACTORY

REPOSITORY

p145 이거 무슨말이징?

image

Factory에서 어떻게 sequence를 가져오지??

y2o2u2n commented 3 years ago

AGGREGATE

image image

FACTORY

image

REPOSITORY

image

궁금증

youngvly commented 3 years ago
  1. aggregate root에서, db쿼리를 통해서는 루트만 직접적으로 획득할 수 있다. 다른 객체는 모두 aggregate를 탐색해서 발견해야한다 ❓
  2. factory를 잘 설계하기위한 조건에서, 생성된 클래스보다는 생성하고자하는 타입으로 추상화되어야 한다.❓
  3. repository에서, findOrCreate 기능은 사용을 자제하자는데,, cretaeOrUpdate와도 같은 맥락이겠지? 그럼 대안은??..