2013-02-17 2 views
0

DDD에 문제가 있습니다. 방금 사용하기 시작 했으므로 많은 경험이 없습니다. 제한된 컨텍스트에는 유지 관리와 클라이언트가 있습니다. 각 클라이언트에는 엔진의 부품 목록이 있습니다. 유지 보수에는 직업이 수리 된 회사가 저장되어 있습니다. 고객은 각 부분에 대해 선호하는 회사를 선택할 수 있습니다.
관리자는 회사를 일시 중지 할 수 있습니다. 두 개의 집계가 변경되었습니다. 처음에는 회사 상태가 바뀌고 다음 회사는이를 선호하는 고객으로부터 삭제되어야합니다. 그것을 다루는 가장 좋은 패턴은 무엇입니까? 집계에서 두 개의 핸들러를 만들 수 있지만 핸들러 중 하나가 예외를 throw하면 어떻게 변경 사항을 롤백합니까?CQRS/ES - 두 개의 집계 변경

+0

정말 제거해야합니까? 다시 정지되지 않으면 어떻게 될까요? 그런 다음 클라이언트 환경 설정에서 실제로 좋게 만들어야합니까? :) –

+0

확인. 어쩌면 그것은 최고의 모범이 아닙니다. 나는 두 개의 집계를 가지고 변경해야 할 때 상황을 해결하는 방법을 고려하고 처리기는 예외를 던질 수 있습니다. – Max

+1

한계가있는 상황과 같은 사운드는 수정해야합니다. 이상적으로 당신은 그 사이에 의존성을 가지기를 원치 않는다. – stephenl

답변

0

집계에서 일관성 경계를 수정해야하는 것처럼 보입니다.

그러나 수정 한 후에도 한 트랜잭션에서 두 개의 집계를 변경해야하는 경우 궁극적으로 일관성있는 시스템과 도메인 이벤트를 사용할 수 있습니다 (CQRS에서는 이미이 작업을 수행하고 있습니다. 그렇습니까?).

Vaughn Vernon은 "도메인 중심 설계 구현"에서 궁극적으로 일관성을 유지하기위한 다음 방법을 제안합니다. 집계 게시 도메인 이벤트는 하나 이상의 가입자에게 전달됩니다. 각 가입자는 자신의 트랜잭션에서 실행되므로 트랜잭션에서 하나의 집합을 여전히 변경합니다. 트랜잭션이 실패하면 (구독자가 시간 초과시 성공을 확인하지 못함) 메시지를 다시 보내거나 일부 롤백 루틴을 실행하십시오.

이벤트 소싱을 사용하고 있으므로 "실패한"이벤트를 거부로 표시하고 Fowler's Retroactive Event mechanism을 사용할 수 있습니다.

관련 문제