【问题标题】:Domain Driven Design (DDD), can my domain have a reference to a RabbitMQ or to any other nuget package?域驱动设计 (DDD),我的域可以引用 RabbitMQ 或任何其他 nuget 包吗?
【发布时间】:2018-11-06 22:51:25
【问题描述】:
我是 DDD 的新手,我想出了一个关于我最近所做的实现的问题。
我的 DDD 项目的用户层向应用程序层请求 IModel 类型的对象以连接到 RabbitMq Brooker。然后应用程序层向域层服务请求一个 IModel,最终将该任务委托给 Infra Layer(通过接口实现)。
它工作得很好,但问题是:领域层了解另一个项目是否违反了 DDD 原则?即使它是一个 Nuget 包项目。
【问题讨论】:
标签:
c#
rabbitmq
nuget
domain-driven-design
nuget-package
【解决方案2】:
请注意,您问的是两个不同的问题。
域驱动设计 (DDD),我的域可以引用 RabbitMQ 或任何其他 nuget 包吗?
否
领域层了解另一个项目是否违反了 DDD 原则?
是
域应该具有尽可能少的依赖关系。因此,您的域层中不应包含 NuGet 包(通常)。
现在您的域层可以有一个接口,您知道该接口很可能由提供商填充到应用层。但是这个界面应该是你的界面,而不是第三方提供的界面。
如果您知道稍后将在应用程序中使用第三方对象。我认为纯 DDD 会让您编写自己的接口,然后使用适配器模式将第三方实现转换为与您的接口一起使用。
因此,在这种情况下,您的域级别没有任何外部依赖项或对应用程序层中的内容的了解。