도메인 주도 설계 구현-도메인 이벤트(2)

도메인 주도 설계 구현

도메인 이벤트(Domain Events)

이벤트의 모델링

이벤트를 모델링할 땐 해당 이벤트가 속한 바운디드 컨텍스트의 유비쿼터스 언어에 따라 이벤트와 속성을 명명하
애그리게잇의 커맨드 오퍼레이션 실행에 따른 결과로 그 이름은 보통 커맨드로 부터 파생된다

이벤트가 제공하는 행동적 오퍼레이션은 어떻게 모델링할까? 일반적으로는 간단하다 이벤트가 보통 불변으로 설계되기 때문이다.
대부분 이벤트는 전체 상태의 초기화를 허용하는 단하나의 생성자만을 갖고 있으며 그와 함께 각 속성의 읽기 접근자를 포함하게 된다.

애그리게잇의 특성과 함께하기

때론 클라이언트가 직접 요청한 내용을 바탕으로 이벤트가 생성되도록 설계하기도 한다.
이는 모델 내 애그리게잇 인스턴스상에 위치한 행동을 실행한 직접적인 결과가 아닌 다른 일부 사건에 응답으로써 이뤄진다.

식별자

고유 식별자를 할당하는 이유를 분명히 하자 이벤트를 서로 구분해야 할때가 있지만 그런 상황은 굉장히 드물다.

어떤 이유로 메시지의 재발송이 일어났든 그 해결책은 원격 구독자로 하여금 중복 메시지 전달을 감지하고 이미 수신된 메시지를 무시하도록 하는것이다.

도메인 모델에서 이벤트 발행하기

도메인 모델이 어떤 종류의 미들웨어 메시징 인프라로든 노출되지 않도록 하라.
이런 컴포넌트는 오직 인프라 내에만 위치한다.

도메인 이벤트를 도메인 모델 외부의 컴포넌트와 결합하지 않고 발행하는 사장 간단하고 효과ㅏ적인 방법은 경량 옵저버의 생성이다.

발행자

도메인 이벤트를 사용하는 가장 흔한 상황은 애그리게잇이 이벤트를 생성해서 발행할 때다.

참조