이벤트 소싱으로 첫 번째 CQRS 프로젝트를 계획하기 시작했으며 시간 제약으로 인해 모델의 일부가 XML 파일에 남아 있습니다. DDD에서 알 수있는 것은 각 업데이트가 집계 루트에 대해 수행되고 다른 집계 루트를 첫 번째 (이벤트가 도메인에서 발생)에서 변경하려는 경우 먼저 두 번째 집계를 수정하는 명령입니다. 각 변경에는 고유 한 트랜잭션 경계가 있습니다.CQRS - 데이터베이스와 파일에 집계가있는 경우?
자, 데이터베이스의 첫 번째 집계에 변경 사항을 커밋 한 경우 두 번째 집계 (이 경우 파일에 쓰기)가 실패하는 상황을 어떻게 처리합니까?
첫 번째 파일 (두 번째 집계)을 업데이트하는 명령을 내린 다음 첫 번째 집계를 변경하는 명령을 내릴 수 있지만 두 번째 명령이 실패 할 수는 있지만이 경우 두 개의 별도 명령이 있습니다. 첫 번째 경우와 같이 처리되는 도메인에서 발생한 이벤트에 대한 생각을 거스르는 것처럼 보입니다.
파일을 사용하지 않고 모든 변경 사항이 데이터베이스에 기록되었다고해도 두 번째 집계 변경이 실패 할 가능성이 있습니다. 이걸 생각 하는게 옳은가요?
아직 내 머리 속의 개념을 분명히하려고 노력하면서 어떤 도움을 주시면 감사하겠습니다.
데니스 감사합니다. 나는 여전히 내가 DDD 라이트 캠프에 있다고 생각하고 나의 이해를 정돈하려고 노력 중이다. 내가 가진 것은 JOliver의 이벤트 저장소를 사용하는 라이센스 기반 컨텍스트입니다. 각 라이센스에는 서비스 유형 (TV, 비디오 등)이 연결되어 있지만 이러한 서비스는 xml 파일에 저장됩니다. 따라서 새로운 라이선스를 만드는 것은 XML 레코드를 생성하는 것입니다. 라이센스 집계는 서비스 집계와 별개의 것으로 보이며 모델을 수정하는 방법을 알 수 없습니다. –
모델을 정제 할 수 없다고 가정하면 첫 번째 집계는 두 번째 집계로 명령을 실행하는 이벤트를 시작합니다. 그것을 가정하는 것이 맞습니까? 지금 두 번째가 실패하면, 나는 "보상 명령"을 보낸다. (나는 그것이 용어라고 생각한다. 제발 고쳐주십시오.) 첫 번째 집합으로. 그 맞습니까? –
@JD 당신은 올바른 길을 가고 있습니다. 이 경우 어떤 종류의 보상 명령이 필요합니다. 또한 "사가 (Saga)"라는 개념을 살펴보십시오. 무대는 자신과 같은 교차 집계 프로세스에 유용한 조정자가 될 수 있습니다. 무용담은 기본적으로 이벤트 핸들러이며, 수신 한 이벤트에 따라 명령을 제출합니다. 그냥 구글 "CQRS Saga"와 거기에서 이동하십시오. 특히 Greg Young과 Rinat Abdullin의 기사. –