0

저는 분산 도메인 기반 디자인의 개념 중 일부에서 균열을 말하고 있으며 개념 증명을 구축 중입니다. C# 솔루션은 전체 시스템 내에서 특정 책임을집니다.분산 된 시스템에서 메시지를 공유하고 전용 어셈블리 또는 라이브러리를 갖는 것이 일반적입니까?

용액 나는이있다 :

  • 쓰기 모델 (클라이언트에서 명령을 받아 생성하고 이벤트를 전송)
  • 읽기 모델 (쓰기 모델에서 이벤트를 수신, 데이터베이스를 생성하고 DTO를 노출 클라이언트 서비스는 잠재적으로 2 개 개의 분리 솔루션)
  • 클라이언트 (호출 서비스가 필요한하려면 데이터가 될 수 있고)

모든 THR 쓰기 모델에 명령을 전송 ee 솔루션은 서비스 버스를 통해 메시징 (명령, 이벤트)을 사용합니다. (내 경우 MassTransit).

내 주요 질문은 : 메시지로 어셈블리를 만들고 각 솔루션에서 해당 어셈블리를 참조하게합니까?

추가 신용 :이 POC에는 이상하거나 문제가있는 부분이 있습니까? 이 유형의 시스템을 만들 때 알아야 할 추가 정보?

+0

저는 계약서를 공유하는 경향이 있습니다. 코드가 아니라 컴파일되지도 않았고 소스 형태로도 쓰이지 않습니다. 그것은 시스템이 "폐쇄 된"방법에 달려 있습니다. –

답변

4

메시지를 사용하여 어셈블리를 만들고 각각의 솔루션에서 해당 어셈블리를 참조하도록 하시겠습니까?

예. 이것은 일반적으로 메시징 시스템의 일반적인 관행입니다. 예를 들어, 많은 NServiceBus 샘플은이 방법을 사용합니다. 이 어셈블리를 계약을 대표하는 것으로 생각하십시오. 다른 플랫폼에서 빌드 된 시스템에서이 표현은 XSD 스키마 또는 다른 스키마 정의 메커니즘의 형태로 제공됩니다.

내가하고있는 일이 뭔가 이상하거나 문제가있는 것 같습니다. POC? 이 유형을 만들 때주의해야 할 추가 정보 시스템?

지금까지 CQRS에는 모든 것이 잘 들어 맞는 것 같습니다. 공정하게 말하자면 CQRS를 주변에 배치하고 구조 시스템으로 은신하기가 쉽다는 것을 언급해야합니다. CQRS를 모두 함께 버리는 것이 현명한 결정 인 경우가 많습니다. 비즈니스 도메인에 초점을 맞추고 CQRS를 아키텍처 스타일로 사용하여 모델을 안내하지 않고 시스템을 구현하십시오.

+0

답변 해 주셔서 감사합니다. 도망가는 것에 대한 좋은 코멘트. 나는 많은 CQRS/DDDD 관련 패턴이 과도한 디자인 경로로 쉽게 몰입 할 수 있다는 것에 동의한다. 당분간 이것은 POC 일 뿐이므로 순수한 학습 혜택을 위해 모든 것을 시도하려고합니다. 이 방법으로 아이디어를 이리저리 뛰어 다니면 도구 벨트에 공구가 놓여 지므로 실제 프로젝트에서 실제로 사용하고 필요한 것을 결정할 수 있습니다. –

+0

많은 MassTransit 프로젝트에서 메시지 계약을 위해 공유 어셈블리를 사용했다고 덧붙이 겠습니다. @eererfx는 내 경험으로 완전히 목표에 달려 있다고 말했습니다. – Travis

+1

또한 메시지 어셈블리의 클래스가 아닌 인터페이스를 고수하는 것을 고려하여 메시지 생성자가 인터페이스를 개인 중첩 클래스로 구현하게하십시오. 메시지 계약 자체와 구현 사이를 명확히 구분해야합니다. –

관련 문제