문제

우리는 노력하고 있습니다 CQRS.CustomerService(도메인 서비스)가 고객 존재 여부를 알아야 하는 검증 상황이 있습니다.고객은 이메일 주소로 고유합니다.우리의 고객 저장소(일반 저장소)에는 Get(id) 및 Add(customer)만 있습니다.CustomerService는 고객이 존재하는지 어떻게 확인해야 합니까?

도움이 되었습니까?

해결책

이 블로그 게시물을 살펴보십시오. CQRS 아키텍처의 세트 기반 유효성 검사.

바로 이 문제를 다루고 있습니다.CQRS에서 처리하는 것은 복잡한 문제입니다.Bjarte가 제안하는 것은 기존 고객 이메일 주소에 대한 보고 데이터베이스를 쿼리하고 보상 명령(예: CustomerEmailAddressIsNotUniqueCompensatingCommand) 이메일 주소가 발견되면 도메인 모델로 돌아갑니다.그런 다음 적절한 이벤트를 시작할 수 있습니다. UndoCustomerCreationEvent.

대체 아이디어를 보려면 위 블로그 게시물의 댓글을 읽어보세요.

아담 D. 유효성 검사가 도메인 문제라는 의견을 제안합니다.결과적으로, 고객 생성을 용이하게 하고 이벤트 저장소의 이벤트에 의해 수화되는 서비스에 ReservedEmailAddresses를 저장할 수 있습니다.

완전히 깨끗하다고 ​​느껴지는 이 문제에 대한 쉬운 해결책이 있는지 잘 모르겠습니다.당신이 무엇을 생각하는지 알려주세요!

행운을 빌어요!

다른 팁

이 문제는 그렇게 복잡 할 필요가 없습니다.

  1. UpdateCustomer 명령을 제출하기 전에보고 스토어에서 고객 고유성을 확인하십시오.
  2. 이메일 주소에서 독창성을 위해 DB에 제약 조건을 추가하십시오. 명령을 실행할 때 예외를 처리하고 응답 채널을 사용하여 사용자에게 알림을 보내십시오. (고객 업데이트 된 이벤트를보고 매장에 해고하지 않습니다.

데이터베이스를 사용하여 ORM 제한 사항에 맞지 않아야합니다.

Udi Dahan 의이 게시물 http://www.udidahan.com/2009/12/09/clarified-cqrs/ 다음 단락이 포함되어 있습니다.

"또한 우리는 쿼리 스토어에 액세스 할 필요가 없어야합니다.

UDI는 단순히 데이터베이스에 고유 한 제약을 추가 할 것을 제안했습니다.

그러나 위의 진술을 바탕으로 그렇게하고 싶지 않다면 저장소에 "이 메일"메소드를 추가하고 완료하는 것이 좋습니다. 그러나 다시 UDI는 아마도 더 나은 제안을 할 것입니다 ..

너무 늦지 않기를 바랍니다. 그러나 우리는 프로젝트에서 비슷한 상황에 직면했으며 실제로 명령 집행자를 가로 채고 해당 명령을 위해 생성 된 규칙 세트에 첨부하여 쿼리를 사용하여 데이터를 가져옵니다.

따라서이 경우 "RegisterCustomerCommand"명령이 RegisterCustomerCommandExecutor에 의해 실행될 때 RuleEengine에 의해 가져 오는 CustomerEmailMustBeuniquerule이라는 이름의 클래스를 가질 수 있습니다. 이 규칙 클래스는 데이터베이스를 쿼리하여 이메일 ID가 존재하는지 확인하고 유효하지 않은 플래그를 올려 실행을 중지해야합니다 ...

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