繁体   English   中英

域驱动设计(DDD),我的域可以引用RabbitMQ或任何其他nuget包吗?

[英]Domain Driven Design (DDD), can my domain have a reference to a RabbitMQ or to any other nuget package?

我是DDD的新手,我提出了一个关于我最近做的实现的问题。 我的DDD项目的User层要求应用层提供一个用于连接RabbitMq Brooker的IModel类型对象。 然后,应用层向域层服务请求IModel,最终委托给Infra Layer该任务(通过Interface实现)。 它运行正常,但问题是:它是否违反DDD原则,Domain层有另一个项目的知识? 即使它是Nuget包项目。

是。 域层应该是您的架构的核心,它只关心域规则和不变量。 所有的协调和管道都应该进入Application层。

洋葱建筑六角建筑是一个良好的开端

还要检查这个DDD解码后的帖子(值得看一下完整的DDD Decodes系列),看一下如何使用应用层来协调业务与其他所有事情的实现。

请注意,您提出两个不同的问题。

域驱动设计(DDD),我的域可以引用RabbitMQ或任何其他nuget包吗?

没有

是否违反DDD原则,Domain层有另一个项目的知识?

域应该具有最少的依赖性。 因此,您的域层不应包含NuGet包(一般情况下)。

现在,您的域层可以拥有一个接口,您知道该接口最有可能由提供商填充在应用层中。 但是这个界面应该是你的界面 ,而不是通过第三方提供的界面。

如果您知道以后要在应用程序中使用第三方对象。 我认为纯DDD会让你编写自己的界面然后使用适配器模式转换第三方实现以使用你的界面。

因此,在这种情况下,您的域级别没有任何外部依赖关系或知道应用程序层中的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM