2012-11-23 2 views
0

많은 응용 프로그램에서 공유 할 도메인의 일부를 캡슐화하는 어셈블리를 개발하는 중입니다. 주문 관리 시스템의 예를 사용하면 이러한 어셈블리 중 하나가 애플리케이션이 주문에 대해 수행 할 수있는 모든 핵심 작업을 포함하게됩니다. "시스템"의 상태를 변경하는 모든 작업이 CancelOrderCommand, ShipOrderCommand 및 CreateORderCommand와 같은 공개 명령으로 표시되도록 CQS/CQRS의 간단한 버전을 적용합니다. 명령 처리기는 어셈블리 내부에 있습니다.공유 모듈에서 읽기 모델을 노출하는 방법

답변을 얻으려고 애 쓰고있는 질문은 읽기 모델을 코드를 사용하는 데 가장 잘 드러내는 방법입니다.

쿼리를 수행하기 위해 코드를 소비함으로써 읽기 모델이 사용됩니다. 읽기 모델이 어떻게 사용되어 인터페이스가 모든 쿼리를 허용 할 수 있도록 유연해야하는지 모릅니다.

나를 복잡하게 만드는 이유는 내 집계 루트를 노출 할 필요가있을뿐만 아니라 클라이언트 응용 프로그램에서 사용할 수있는 관련 데이터의 "조회"목록이 여러 개 있기 때문입니다. 예를 들어, 각 주문에는 데이터 기반 (예 : 열거 형) 인 관련 OrderType이 있으며 수행 할 수있는 작업/수행 할 수없는 작업을 제어하는 ​​비즈니스 규칙 중 일부를 구동하는 여러 가지 속성이 포함되어 있습니다. 이 관계를 관리하는 모듈; 그러나 주. 작성을 허용하는 클라이언트 응용 프로그램은 가능한 OrderTypes 목록을 사용자에게 표시해야 할 가능성이 높습니다. 따라서 Order 집계 목록을 공개 할뿐만 아니라 내 읽기 모델의 OrderTypes (및 다른 조회 목록)의 지원 목록을 노출해야합니다.

일반적으로 어떻게 이루어 집니까?

나는 내가 CQRS 기반의 구현은 임시 그래서이 쿼리의 전체 데이터 집합을 노출 본 적이 없다

답변

0

... 너무 멀리 문의하시기 바랍니다, 해결책을 트리거 도움이됩니다 설명 할 다른 모르겠어요 흥미로운 상황입니다! 일반적인 CQRS 시나리오에서는 호출 할 때 이벤트를 발생시킬 수 있으므로 매우 구체적인 쿼리가 노출됩니다 (예를 들어 캐싱을 위해 - 자세한 내용은 this post 참조).

그러나 이것이 당신의 디자인이기 때문에 "일반적인"또는 "올바른"CQRS에 대해 걱정하지 마십시오. 솔루션이 필요합니다. 내가 본 유연한 쿼리를 위해 데이터를 노출하기위한 가장 새로운 메커니즘 중 하나는 Open Data Protocol (OData)입니다. 이를 통해 소비자는 자신이 노출 한 데이터 소스에 대해 자체 필터링, 정렬 및 페이징을 구현할 수 있습니다.

대부분의 구현은 관계형 데이터를 처리하는 것처럼 보입니다. 관계형 데이터 소스를 다루는 경우에는 OData가 좋은 방법 일 수 있습니다. 내 "집계 루트 공개"귀하의 의견을 용의자가 문서 데이터베이스를 사용하고있을 수도 있습니까? 그렇다면, MongoDB 위에 OData 서비스를 보았던 한 예가 있습니다 : http://bloggingabout.net/blogs/vagif/archive/2012/10/11/mongodb-odata-provider-now-supports-arrays-and-nested-collections.aspx.

도움이 되었기를 바랍니다. OData는 확실히 조사 할 가치가 있습니다. 정말 빠르게 성장하고있는 것으로 보이며 서버 및 클라이언트 기술 플랫폼 모두에서 좋은 지원을 얻고 있습니다.

관련 문제