nservicebus / cqrs : userinterface에서 물건을 처리하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1949530

문제

명령 쿼리 분리 및 SOA] [1]에 대한 Udi Dahan의 텍스트를 읽었습니다. 내가 현재 이것을 어떻게 사용할 것인지에 대해 생각하면서 나는 현재 일하고있다. 몇 가지 질문을 제기했다 ...


1.

사용자가 항목 목록을 편집 할 수있는 WPF 클라이언트 응용 프로그램이있는 다음 상황을 고려하십시오.

클라이언트 응용 프로그램이 시작되었습니다. 스타트 업에서는 항목에 대한 변경 사항을 처리하고 게시하는 명령 서비스를 구독하며 전체 항목 목록에 대한 WCF 서비스를 쿼리합니다. 항목 목록을 수신 한 후 WCF의 답변을 기다리는 바쁘고 클라이언트 대기열에 게시 될 수있는 모든 변경 사항 (다른 클라이언트의 변경 사항)이 목록에 병합됩니다.

이제 나에게 변경 사항을 담당하는 명령을 처리 한 직후에 클라이언트가 구독하고 WCS 서비스의 쿼리가 데이터베이스에 동일한 변경 사항이 커지기 직전에 시작될 가능성이있는 것 같습니다. 이 상황에서는 클라이언트 애플리케이션이 다시 시작되지 않는 한 데이터베이스와 동기화되지 않은 내 클라이언트의 잘못된 데이터로 끝납니다. 이 문제가 실제로 존재합니까? 그렇다면 어떻게 처리해야합니까?


2. 두 번째 질문은 사용자 인터페이스를 설계/구현하는 방법에 관한 것입니다.

사용자는 이제 목록의 항목을 변경하려고합니다. Windows가 나타나고 데이터가 변경되고 OK 버튼을 누릅니다.이 변경 사항을 처리하기 위해 명령 핸들러에게 메시지를 보냅니다. 사용자는 확인 (목록의 항목 변경) 또는 오류 메시지가 표시됩니다.

이제 사용자 인터페이스의 물건을 '동기'방식으로 처리하려고 시도 할 수 있습니다 (사용자가 한 번에 한 가지 씩 한 가지 일을하고 다른 일을하기 전에 성공이나 실패를 기다리게합니다).

  1. 사용자가 OK를 누른 후 모든 컨트롤을 비활성화하여 더 이상 편집 할 수 없습니다.
  2. 기다리는 타임 아웃이있는 사가를 만듭니다 ...? 응답 메시지? 명령 서비스에서 게시 된 알림? 둘 다?
  3. 응답 메시지가 수신되면 목록의 데이터가 변경되고 컨트롤이 활성화되고 수행됩니다.
  4. 시간 초과가 발생합니다. 명령 메시지가 대기되었으므로 변경 사항이 결국 수행되므로 어떻게해야합니까? 사용자에게 메시지를 표시합니다 ( "이것은 예상보다 오래 걸립니다 ..."), 명령 서비스에서 알림이 수신되면 모든 컨트롤을 활성화하고 클라이언트의 데이터를 변경합니까? 그러나 오류가 반환되면 어떻게됩니까? 사용자는 다른 작업을 수행하기 시작했을 수 있으며 (다른 항목을 편집 할 수 있음) 이전 편집 시도에서 오류 메시지를 표시하는 것은 좋은 생각처럼 보이지 않습니다.

또 다른 접근법은 아마도 명령을 보내고 사용자가 다음에 원하는 일을 계속하도록하는 것입니다. 어딘가에 사용자 인터페이스의 목록에 모든 미결 명령을 표시하거나 성공 또는 실패의 표시기와 실패시 오류 메시지를 표시 할 가능성이 있습니다. 시간 초과가 희망적으로 예외적이며 응답은 일반적으로 몇 초 안에 응답을 받아야한다는 것을 감안할 때이 목록은 일반적으로 최대 1 개의 미결제 명령을 가져야한다는 것을 의미합니다. 이런 식으로 작업을 수행하는 사용자 인터페이스는 아마도 좋은 생각이 아니라는 것을 의미합니다.

그리고 당신의 질문은? ;)

글쎄, 나는 다른 사람들이 사용자 인터페이스에서 어떻게 이것을 해결하고 있는지 궁금합니다. 아마도 UI에서 물건을 처리 할 수있는 더 좋은 방법이있을 수 있습니까?

긴 텍스트에 대한 사과와 답변에 미리 감사드립니다.

[1]: http://www.udidahan.com/2008/08/11/command-query-separation-and-soa/"명령 쿼리 분리 및 SOA"

도움이 되었습니까?

해결책

질문 번호 1의 질문에 쿼리를위한 표준 솔루션은 클라이언트 RPC- 요청/응답에 대한 서버 측 지속적인 쿼리 저장소를 작성하는 것입니다.

질문 번호 2에 대한 답은 도메인, 즉 명령의 종류, 사용자 간 협업의 특성에 크게 의존합니다. 가장 중요한 규칙으로, UI 및/또는 명령의 데이터/처리를 변경하여 명령이 실패하지 않도록 (악의적 인 사용자에 대해 이야기하지 않는 한) 명령을 변경할 수있는 방법을 생각해보십시오.

도움이되기를 바랍니다.

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