2010-08-05 2 views
6

나는 내가 CQRS 패턴 다음 구현해야 다음 시나리오 한 : CQRS - 최종 일관성

  • 사용자의

    1. 사용자 로그는 사용자가 결정을 요청
    2. 일부 보험 정보를 입력합니다
    3. 을 적용 할 사용자는하지만, 내 probl을 결정

    이 매우 간단 보인다 결과를 볼 em은 3 단계와 4 단계 사이에 있으며, 3 단계에서 나는 underwriting 서비스로부터 결정을 내릴 ApplyForDecision 명령을 전송하고, 그 결정의 결과가 포함 된 이벤트는 나중에 읽고 소비하는 읽기 저장소의 버스로 전송됩니다 결정 결과가있는 뷰 테이블.

    UI에 문제가 있습니다. CQRS에서 읽기 모델이 곧바로 업데이트되지 않기 때문에 의사 결정이 적용되고 있음을 사용자에게 알려주려면 어떻게해야합니까? UI 진행을 결정하는 방법을 어떻게 표시합니까? '곧'도착할 것인가?

    결정이 아직 적용되지 않았기 때문에 사용자가 로그 아웃하고 다시 로그인 할 수있는 권한을 부여해야합니다. UI에 '보류 결정 화면'을 표시하려면 어떻게해야합니까?

  • +0

    UI가 웹 클라이언트 또는 스마트 클라이언트입니까? – stung

    +1

    어떤 방식 으로든 상태가 변경 되었습니까? 내 말은,이 결정 응용 프로그램이 확인해야 할 계산의 일부 형태인가? 그렇다면 시스템의 "다른"사용자에게 표시 되나요? 이 시나리오는 어떻게 매우 협조적입니까? –

    답변

    3

    IMHO 해결책은 "ApplyForDecisionRequested"및 "ApplyForDecisionHandled"이벤트를 내보내고 이에 따라 읽기 모델을 업데이트하는 것입니다.

    7

    대답은 결정이 적용되었음을 나타내는 이벤트를 즉시 발생시키고, 읽기 DB를 업데이트하고 그 시간까지 읽은 DB가 업데이트되었는지 여부와 상관없이 보류중인 결정 화면으로 곧바로 리디렉션됩니다. 정적 텍스트 '결정이 보류됩니다.'또는 그 라인을 따라 무엇인가. 나중에 새로 고침하거나 다시 돌아와 실제 데이터를 얻을 수 있습니다. 그런 다음 결정이 결정되면 DecisionMade 이벤트가 발생하고 그에 따라 읽은 DB를 업데이트하고 이메일을 발송합니다.

    이것은 CQRS에서 다루어야하는 최종 일관성과의 균형입니다. 종종 폼의 도메인 객체 속성을 변경하면 백엔드가 집안일을하는 동안 사용자가 얻는 즉각적인 피드백에서 가짜입니다. 예, 조금 못 생겼지 만 사용자는 그 사실을 모릅니다.

    +2

    좋은 답변, 특히 사용자가 알지 못하는 경우. 그것이 열쇠입니다. 사용자가주의를주지 않도록하십시오. 예를 들어 항목이 업데이트 된 브라우저 또는 서버 캐시를 저장할 수 있습니다. 데이터에 대한 readmodel에 액세스하고 캐시에서 데이터가 아직 업데이트되지 않았 음을 알게되면이 사용자에 대해서만 직접 수행하게됩니다. SignalR은 다른 클라이언트를 가능한 빨리 업데이트하는 데에도 좋습니다. –