2012-10-01 2 views
9

http://cre8ivethought.com/blog/2009/11/12/cqrs--la-greg-young에 따르면 이벤트 게시자를 사용하여 이벤트를 게시하는 구성 요소가 저장소입니다.CQRS 리포지토리가 이벤트 저장소가 아닌 이벤트를 게시하는 이유는 무엇입니까?

제 질문은 간단합니다 : 왜 그렇습니까? 이 블로그 게시물에서

이 우리가 있다고 말했다됩니다

도메인 저장소는 이벤트를 게시에 대한 책임이 일반적으로 이벤트 저장소에서 이벤트를 저장와 함께 하나의 트랜잭션 내에서 일 것이다.

이벤트 저장소의 작업으로 예상했을 것입니다. 이벤트 (또는 여러 이벤트)가 저장되면 게시됩니다.

왜 저장소에 있습니까?

답변

9

도메인 모델은 저장 메커니즘을 인식하지 못합니다. 다른 한편으로는 이벤트 저장소, 클래식 SQL 저장소 또는 기타 지속성 방법을 사용하는지 여부에 관계없이 적절한 이벤트가 게시되도록해야합니다.

이벤트를 공개하기 위해 이벤트 저장소를 사용하는 경우 저장 메커니즘과의 결합이 약합니다.

+0

을, 당신이 언급 한 바와 같이, 해당 이벤트의 게시가 shouldn 기본 이벤트 저장소의 책임이 아니라 "게시되지 않은"마커를 설정하는 동안 DB 테이블을 사용하여 이벤트를 저장하는 솔루션입니다. 다른 프로세스가 해당 테이블에서 "게시되지 않음"으로 표시된 이벤트를 읽은 다음 게시 한 후 마커가 설정되고 트랜잭션이 커밋됩니까? 이 경우 게시되지 않은 이벤트의 테이블을 폴링하여이를 수행하는 방법입니까? – CraigM

2

두 이벤트 중 하나가 실패하면이 이벤트의 리스너가 이벤트 생성자와 동기화되지 않기 때문에 이벤트 저장 및 게시는 원자 적 명령어이어야합니다.

2pc 트랜잭션 (2 단계 확약)을 사용하는 이벤트 저장소에서 이벤트를 공개하는 것과 비교할 때 다른 (더 비싼) 솔루션이 있습니다.

여기에 좀 더 intereting 정보를 찾을 수 있습니다 이벤트와 해당 이벤트의 출판의 저장은 여전히 ​​2PC를 피하면서 원자 작업을 할 필요가 있기 때문에 https://cqrs.wordpress.com/documents/building-event-storage/

관련 문제