Domain driven design 在分布式系统中,为消息提供共享和专用的程序集或库是否是常见的做法?

Domain driven design 在分布式系统中,为消息提供共享和专用的程序集或库是否是常见的做法?,domain-driven-design,.net-assembly,cqrs,distributed-system,masstransit,Domain Driven Design,.net Assembly,Cqrs,Distributed System,Masstransit,我正在讨论分布式域驱动设计背后的一些概念,我正在构建一个概念证明。我有三个C#解决方案,它们在整个系统中具有特定的责任 我的解决办法是: 写入模型(从客户端接收命令并创建和发送事件) 读取模型(从写入模型接收事件、创建数据库并向客户端公开DTO服务,可能是两个独立的解决方案) 客户端(调用服务以获取所需的数据,并向写模型发送命令) 这三种解决方案都通过服务总线使用消息传递(命令、事件)。(就我而言) 我的主要问题是:创建包含消息的程序集并让每个解决方案引用该程序集是否是常见做法 额外积分:在

我正在讨论分布式域驱动设计背后的一些概念,我正在构建一个概念证明。我有三个C#解决方案,它们在整个系统中具有特定的责任

我的解决办法是:

  • 写入模型(从客户端接收命令并创建和发送事件)
  • 读取模型(从写入模型接收事件、创建数据库并向客户端公开DTO服务,可能是两个独立的解决方案)
  • 客户端(调用服务以获取所需的数据,并向写模型发送命令)
这三种解决方案都通过服务总线使用消息传递(命令、事件)。(就我而言)

我的主要问题是:创建包含消息的程序集并让每个解决方案引用该程序集是否是常见做法

额外积分:在这个POC中,我正在做的任何事情是否看起来奇怪或有问题?创建这种类型的系统时,我应该知道的任何其他信息

创建带有消息和 每个解决方案都引用该程序集

对。这是一般消息传递系统的常见做法。例如,许多NServiceBus示例都采用这种方法。将此程序集视为代表您的合同。在基于不同平台构建的系统中,这种表示将以XSD模式或其他模式定义机制的形式出现

在这方面,我有没有做一些奇怪或有问题的事情 POC?创建此类型时应注意的任何其他信息 一个系统的功能

到目前为止,一切似乎都很适合CQR。公平地说,我应该提到,CQR作为一个银弹和围绕它的结构系统很容易让人忘乎所以。一起放弃CQR通常是明智的决定。将重点放在业务领域,并将CQR用作实现系统的体系结构样式,而不是指导其模型

创建带有消息和 每个解决方案都引用该程序集

对。这是一般消息传递系统的常见做法。例如,许多NServiceBus示例都采用这种方法。将此程序集视为代表您的合同。在基于不同平台构建的系统中,这种表示将以XSD模式或其他模式定义机制的形式出现

在这方面,我有没有做一些奇怪或有问题的事情 POC?创建此类型时应注意的任何其他信息 一个系统的功能


到目前为止,一切似乎都很适合CQR。公平地说,我应该提到,CQR作为一个银弹和围绕它的结构系统很容易让人忘乎所以。一起放弃CQR通常是明智的决定。将重点放在业务领域,并将CQR作为一种体系结构风格来实现您的系统,而不是指导其模型。

谢谢您的回答。关于被冲昏头脑的好评论。我同意,许多和CQRS/DDDD相关的模式可以很容易地让您走上一条设计道路,这是过分的。现在,这只是一个POC,所以我正努力为纯粹的学习利益而努力。我发现,通过这种方式玩弄创意,可以将工具放在工具带中,然后我可以决定实际需要拿出哪些工具,并在实际项目中使用。我要补充的是,我在许多MassTransit项目中使用了共享程序集作为消息契约。@eulerfx所说的完全符合我的经验。另外,考虑到在消息程序集中坚持使用接口而不是类,让消息生产者将接口实现为一个私有嵌套类——只是为了在消息契约本身和实现之间保持清晰的分离。谢谢你的回答。关于被冲昏头脑的好评论。我同意,许多和CQRS/DDDD相关的模式可以很容易地让您走上一条设计道路,这是过分的。现在,这只是一个POC,所以我正努力为纯粹的学习利益而努力。我发现,通过这种方式玩弄创意,可以将工具放在工具带中,然后我可以决定实际需要拿出哪些工具,并在实际项目中使用。我要补充的是,我在许多MassTransit项目中使用了共享程序集作为消息契约。@eulerfx所说的完全符合我的经验。另外,考虑到在消息程序集中坚持使用接口而不是类,让消息生产者将接口实现为私有嵌套类——只是为了在消息约定本身和实现之间保持清晰的分离。我倾向于共享约定,不是代码(既不是编译的,也不是源代码)。这取决于系统的“封闭”程度。我倾向于共享契约,而不是代码(既不是编译的,也不是源代码)。这取决于系统的“封闭”程度。