【问题标题】:DDD: Where to Place Interfaces (ports)DDD:放置接口(端口)的位置
【发布时间】:2018-06-22 09:11:06
【问题描述】:

我知道IRepository必须放在域文件夹中,但是对于其余的接口,例如:IQueryBus,ICommandBus...我应该将它们放在Application文件夹中吗?

我见过很多例子,其中一些将这种接口放在 /domain/bus/IQueryBus、/domain/bus/ICommandBus 等域中,而另一些则将它们放在 /application/bus/IQueryBus /application/bus 中/ICommandBus。我不确定什么是最好的选择以及为什么。我也读过这篇文章https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/ 解释:重要的是要注意端口(接口)属于业务逻辑内部,而适配器属于外部。那么,如果我理解得很好,所有接口都必须放在域文件夹中?

【问题讨论】:

    标签: domain-driven-design


    【解决方案1】:

    首先,我们要区分端口的方面:

    驱动程序端口(主要端口)。它们是提供我们应用程序用例的接口。所以它们属于应用层。它们由驱动适配器调用,由应用层实现。

    驱动端口(辅助端口)。这取决于。驱动端口是一种抽象(接口),用于执行由应用程序外部的外部参与者执行的某些任务。如果这样的任务是独立于任何域的逻辑,那么端口接口属于应用层(例如用于认证和授权的端口)。如果任务是应用程序域的逻辑,则端口属于域。

    【讨论】:

      【解决方案2】:

      我将 context 这个词称为一个空间,可以是包或文件夹或任何可用于分隔概念的容器。
      您应该将每个接口置于由其用途决定的上下文中。
      ICommandBus 这样的通用接口可以放在“基础设施”上下文中,这些接口在域上下文中提供域行为,如果在其中你在域上下文中有更具体的上下文,请使用那个。
      这种接口就像上下文之间的桥梁,因此,每个上下文都有自己的接口,提供在不同上下文中实现的功能。

      【讨论】:

        猜你喜欢
        • 2018-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-30
        • 2011-10-16
        • 1970-01-01
        • 1970-01-01
        • 2011-11-10
        相关资源
        最近更新 更多