CQRS 및 이벤트 소싱을 사용할 때 - 내 프레젠테이션 프로젝트 대신 원격 이벤트 처리기로 작성된 읽기 모델을 열심히 쿼리하는 옵션이 무엇인지 궁금합니다.읽기 모델 쿼리를위한 저장소 불가 지론 옵션
NServiceBus를 사용하여 명령을 보내고 이벤트를 게시하고 이벤트를 수신하고 RavenDB에서 읽기 모델을 작성하도록 응용 프로그램 프로젝트를 구성했습니다.
필자의 프레젠테이션 프로젝트를 RavenDB에서 읽었을지라도 내 프레젠테이션 레이어를 RavenDB 또는 다른 이벤트 리스너가 사용하는 것으로 고정시키고 프리젠 테이션 레이어를 불가지론으로 유지하고 싶습니다.
원래 NServiceBus 요청/응답을 사용하는 것에 대해 생각하고 있었지만 여러 가지를 읽었습니다.
이 옵션이 있습니까? 댓글
에서
편집 내가 이벤트를 수신하고 결과를 저장하기 위해 별도의 실행중인 프로세스를 사용하여 ravendb에서 읽기 모델을 구축하고있는 중이 야.
이러한 빌드 된 모델의 결과를 검색하는 유일한 방법은 내 프레젠테이션 개체 (일명 웹 API)를 ravendb에 연결하는 것입니다. 이것이 내가 피하려고하는 것입니다.
왜?
웹 응용 프로그램의 인스턴스 20 개를 스핀 업하려는 경우, 각 인스턴스는 이미 연결 한 많은 읽기 모델 작성 프로세스 외에도 ravendb에 연결해야합니다. 병목을 까먹기.
내가 원하는 것은 내 웹 API의 요청을 데이터 용 응용 프로그램 대기열로 보내고 데이터가 회신 형식으로 돌아올 때까지 기다리는 것이 가장 이상적입니다. 이렇게하면 응용 프로그램 프로세스가 수행하는 작업이나 데이터를 저장하는 방법에 대해 전혀 신경 쓰지 않고 데이터 만 얻을 수 있습니다.
나는이 방법에 대해 읽은이 개 기사가 있습니다 -
이 한 말씀이 그것을 http://andreasohlund.net/2010/04/22/messaging-shouldnt-be-used-for-queries/
하지 않는이 사람은 당신이 경우 그 http://www.udidahan.com/2007/11/10/asynchronous-high-performance-login-for-web-farms/
쿼리 핸들러 또는 좋은 기존 리포지토리 (DDD가 아닌)를 사용할 수 있습니다. – MikeSW
감사합니다. 리포지토리는 고정 된 데이터 소스에 대한 마스크입니다. 동일한 레포를 유지하면서 데이터 소스를 마이그레이션해야했습니다. 과장된 말처럼 쿼리 핸들러에서 찾은 모든 예제는 repo 및 서버상의 쿼리 데이터 액세스로 이어집니다. 아마도 메시지 기반 쿼리 처리기를 사용하는 예제를 제공 할 수 있습니까? – Charles
우선 리포지토리 패턴은 사례보기 모델의 앱 개체에서만 작동하므로 필요에 따라 데이터 소스를 실제로 전환 할 수 있습니다. 완전히 다른 리포 구현도 필요합니다. 조회 핸들러는 데이터 소스를 조회하는 DAL에 직접 위치합니다.또한 뷰 모델을 반환하고 다른 데이터 소스에 맞게 다시 작성해야합니다. 하지만 두 경우 모두 프리젠 테이션 레이어가 지속성에서 분리되어 원하는 결과를 얻었습니다 – MikeSW