Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

AI DDD 툴 : https://app.qlerify.com/

도메인 모델및 이벤트 만들기

Info

장바구니 기능을 만들고 싶은 단순하게 장바기느를 구매만 이용하는게 아닌

장바구니의 이벤트를 활용(담기/빼기..), 이벤트를 추적해 구매자의 최종 구매 심리적 요인과

구매예측을 만들고 싶음 기본 이벤트를 설계해.... 

Image Added


1. Command (명령)

  • 정의: 시스템에 "무언가를 하라"고 요청하는 객체.

  • 예시: CreateOrderCommand, ChangeUserEmailCommand

  • 특징:

    • 상태를 변경하는 의도(Intent) 를 나타냄

    • 보통 쓰기 작업(write) 에 해당하며, 반환값은 없거나 간단한 결과 (ex: 성공/실패, ID 등)

    • 컨트롤러나 API에서 입력값을 받아 생성됨

  • DDD 문맥에서 역할:

    • Aggregate에게 전달되어 비즈니스 규칙에 따라 실행됨

    • CQRS 구조에서는 Query와 명확히 분리됨

...

2. Aggregate Root & Read Model

Aggregate Root

  • 정의: 관련된 도메인 객체들의 일관성을 책임지는 루트 엔티티

  • 예시: OrderOrderItem들을 포함하지만, 외부에서는 Order를 통해서만 접근

  • 역할:

    • 모든 상태 변경은 Aggregate Root를 통해 수행

    • 도메인 규칙과 트랜잭션 경계를 보장

    • ID로 식별됨

  • 실제 코드 예시 (Kotlin):

Code Block
themeEmacs
class Order(private val id: UUID, private val items: List<OrderItem>) { fun addItem(item: OrderItem) { /* 비즈니스 규칙 검증 후 추가 */ } }


Read Model (읽기 전용 모델)

  • 정의: 조회를 빠르게 하기 위해 최적화된 별도의 데이터 구조

  • 특징:

    • Command 모델과 분리됨 (특히 CQRS에서 중요)

    • 보통 DB View, Projection, DTO 등으로 구성

    • 일관성보다는 응답 속도를 중시함

  • 예시: OrderSummaryView, UserDashboardDto

...

3. Given - When - Then

  • 정의: 도메인 동작을 검증하기 위한 테스트 시나리오 패턴
    → BDD(Behavior-Driven Development) 스타일의 도메인 테스트에 사용

  • 형식:

    • Given: 초기 상태(이전 이벤트 또는 존재하는 Aggregate 상태)

    • When: 명령(command)을 실행할 때

    • Then: 예상되는 결과(이벤트 또는 상태 변화)

  • 예시 (Kotlin 테스트 코드 형태):

Code Block
themeEmacs
Given(주문이 생성되어 있고) When(상품을 추가하면) Then(상품이 주문에 포함되어야 한다)
Code Block
themeEmacs
given(OrderCreatedEvent) when(AddItemCommand) then(shouldEmit(ItemAddedEvent))



AI에 의해 완성된 도메인 이벤트/모델

Image Added