2014-04-26 1 views
2

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/

+0

쿼리 핸들러 또는 좋은 기존 리포지토리 (DDD가 아닌)를 사용할 수 있습니다. – MikeSW

+0

감사합니다. 리포지토리는 고정 된 데이터 소스에 대한 마스크입니다. 동일한 레포를 유지하면서 데이터 소스를 마이그레이션해야했습니다. 과장된 말처럼 쿼리 핸들러에서 찾은 모든 예제는 repo 및 서버상의 쿼리 데이터 액세스로 이어집니다. 아마도 메시지 기반 쿼리 처리기를 사용하는 예제를 제공 할 수 있습니까? – Charles

+0

우선 리포지토리 패턴은 사례보기 모델의 앱 개체에서만 작동하므로 필요에 따라 데이터 소스를 실제로 전환 할 수 있습니다. 완전히 다른 리포 구현도 필요합니다. 조회 핸들러는 데이터 소스를 조회하는 DAL에 직접 위치합니다.또한 뷰 모델을 반환하고 다른 데이터 소스에 맞게 다시 작성해야합니다. 하지만 두 경우 모두 프리젠 테이션 레이어가 지속성에서 분리되어 원하는 결과를 얻었습니다 – MikeSW

답변

1

갈 말한다 올바른 작업을 수행하기 위해서는 독자가 가지고있는 읽기 작업에 초점을 맞춘 읽기 모델을 선택해야합니다. 당신이 그것을 밖으로 바꿀 거라 생각하지 않는 한, 직접 제품을 사용하십시오! 관계형 읽기 모델의 경우 간단한 SQL 인터페이스 (예 : jdbc, ado.net)를 사용하십시오. 그래프 모델에는 Cypher를 사용하십시오. 키 - 값 저장소에 원시 API를 사용하십시오. 아직 또 다른 추상화를 추가하지 마십시오. 그것은 처음부터 읽기와 쓰기를 분리하는 목적의 많은 부분입니다.

+0

좋은 지적입니다. 프레젠테이션 개체 만이 정보를 읽는 데 필요한 정보를 정확히 알 수 있기 때문에 필요한 정보 만 얻을 수 있습니다. – Charles