2017-09-06 5 views
0

내가 DDD를 사용하여 CQRS 응용 프로그램을 설계하고, 다음과 같은 시나리오를 구현하는 방법을 궁금 :DDD를 사용하는 CQRS 아키텍처에서 sagas를 사용하는 방법은 무엇입니까?

  • Participant 집계 여러 참조 할 수 ParticipantEntry
  • AddParticipantInfoCommand이 명령 측에 발행 집계하는 (AN OrderOrderLineItem 유사) ParticipantParticipantEntry의 모든 정보를 포함하는

논리 채널 것을 구현해야 어디 참가자가 이미 존재하는지 여부를 확인하고 존재하지 않는 경우 참가자를 만듭니다?

은이 사가에서
  • 을 수행 할 수 있어야 첫 번째 검사 도메인 Participant의 존재에 대한 모델, 그리고 그것이, 이후 AddParticipantCommandParticipant ID을 포함하는 AddParticipantEntry 명령을 실행 찾지 못하면?
  • 도메인 모델 자체의 aggregateroot가 전체적으로 수행해야합니까?
+0

"참가자 집계 여러 ParticipantEntry 집계과 연관 될 수있다"- 당신은 무엇을 의미합니까? –

+0

어떻게 관련이 있습니까? 신분증으로? 이 "연상"을 나타내는 것은 무엇입니까? –

+0

'짧은'기간 동안 중복 된 참가자가 추가되면 어떻게됩니까? 비즈니스에 미치는 영향은 무엇입니까? 인간이 명령을 다시 시도하거나 취소 할 수도 있습니다. –

답변

2

당신 돈 이 상황을 다루려면 반드시 무용담이 필요합니다. 집계 뿌리를 만드는 이유 하지 내 블로그 게시물에서보세요, 대신 무엇을 :

http://udidahan.com/2009/06/29/dont-create-aggregate-roots/

+0

그래서 실제로는 도메인 모델 자체가 명령 처리기 (또는 블로그 게시물에 명시된대로 서비스 계층)가 아닌 종속 엔터티를 만들어야합니다. 저를 올바른 방향으로 가리켜 주셔서 감사합니다! –

1
논리는 참가자가 이미 존재하고 존재하지 않는 경우, 참가자를 작성하는지 여부를 확인하는 구현해야

?

대부분의 경우이 동작은 참가자 집계 자체의 제어하에 있어야합니다.

프로세스는 여러 트랜잭션 경계에서 변경 사항을 조정해야 할 때 유용합니다. 그러나 동일한 집계에 대한 두 가지 변경 사항은 동일한 트랜잭션 내에서 관리 될 수 있습니다.

은이를 조정과 함께 동일한 집계에서 작동하는 두 개의 다른 트랜잭션으로 구현합니다. 그러나 프로세스의 추가 복잡성은 어떠한 이득도 제공하지 않습니다. 단일 명령을 집계에 보내고 올바른 불변성을 유지하기 위해 수행 할 작업을 결정할 수있게하는 것이 훨씬 간단합니다.

Sagas는 특히 여러 트랜잭션을 되돌리기위한 패턴입니다. Yan Cui의 How the Saga Pattern manages failures with AWS Lambda and Step Functions에는 여행 예약 사가의 좋은 예가 포함되어 있습니다.

(참고 :.. "사가"의 정의에 대해 상당한 혼란이 존재하며 NServiceBus 커뮤니티 용어를 처음 Garia-Molina and Salem kellabyte의 Clarifying the Saga Pattern 설문 조사에 의해 혼란을 설명보다 약간 다른 방식을 이해하는 경향이있다)