【问题标题】: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


    【解决方案1】:

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

    一个好的开始是Onion ArchitectureHexagonal Architecture

    还可以查看此DDD Decoded 帖子(值得一看完整的 DDD 解码系列)以了解有关如何使用应用程序层来协调业务与所有其他事物的实现。

    【讨论】:

      【解决方案2】:

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

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

      领域层了解另一个项目是否违反了 DDD 原则?

      域应该具有尽可能少的依赖关系。因此,您的域层中不应包含 NuGet 包(通常)。

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

      如果您知道稍后将在应用程序中使用第三方对象。我认为纯 DDD 会让您编写自己的接口,然后使用适配器模式将第三方实现转换为与您的接口一起使用。

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

      【讨论】:

        猜你喜欢
        • 2013-10-06
        • 2018-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多