문제

저는 2 개의 집계 루트와 1 개의 정규 엔티티로 구성된 간단한 예문 도메인을 가지고 있습니다. Tenant, UserGroupUser에서이 특정 샘플에서 TenantUser는 두 개의 AggregateRoots 를 구성합니다.

명령이 UI / 서비스 계층에서 수신되면 쓰기 전용 도메인을 조작하는 명령 핸들러에 도달합니다.

User AggregateRoot 가 아니어야하지만 다른 사람이 참조하기 때문에 일반 엔터티가 될 수 없다고 말할 수 있습니다. (예?)

이 두 AggregateRoot는 통신해야합니다. UserUserGroup의 경계 컨텍스트에있는 엔티티 인 Tenant에 속하지 않으면 만들 수 없습니다. 아마도 생성자를 통해 User를 생성 할 수있을 것입니다. User.Create(TenantId, UserGroupId)

사용자의 Date, AggregateVersion 및 AggregateId를 사용하여 DomainEvent를 생성합니다. 이제 흐릿한 부분에 대해 알아 보겠습니다.

이 이벤트를 매장에 커밋하면이 이벤트가 버스 (메모리 등)에 방송됩니다. 이것은 명령 핸들러와 유사한 도메인의 이벤트 핸들러가 사용자가 생성 한 것을 포착하고 Tenant를 추가하기 위해 UserGroupUserId를 통지 / 조작하는 지점입니까?

이 문제를 해결하려는 생각이 완전히 잘못된 방향으로 가고 있습니까?

도움이 되었습니까?

해결책

Saga는 귀하가 찾고있는 것일 수 있습니다.

간단히 말해 : saga는 특정 이벤트를 수신하고 다른 집계 루트 또는 컨텍스트 경계를 넘어서 명령을 실행하는 이벤트 핸들러로 구현 될 수 있습니다.

귀하의 경우 다음과 같이 보일 수 있습니다. 라코 디스

이 기사 또는 "CQRS, 경쟁 조건 및 무용담-오 마이!" by Udi Dahan

업데이트 :

주석에서 확장 된 논의를 마친 후 이것이 어떻게 다른 각도에서 작동 할 수 있는지 보여 주려고 노력할 것입니다 (앞의 의사 코드).이것은 가능한 해결책에 대한 더 많은 빛을 비추 길 바랍니다. 라코 디스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top