代码之家  ›  专栏  ›  技术社区  ›  Agustin Castro

DDD:接口(端口)的放置位置

  •  0
  • Agustin Castro  · 技术社区  · 6 年前

    我知道IRepository必须放在域文件夹中,但对于其他接口,如:IQueryBus、ICommandBus。。。我应该把它们放在应用程序文件夹中吗?

    我见过很多这样的例子,其中一些把这种接口放在域中,比如/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/ 这说明:需要注意的是,端口(接口)属于业务逻辑内部,而适配器属于外部。所以,如果我理解得很好,所有接口都必须放在域文件夹中?

    2 回复  |  直到 6 年前
        1
  •  0
  •   rascio    6 年前

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

        2
  •  0
  •   choquero70    6 年前

    首先,我们必须区分港口的各个方面:

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

    受驱动端口(辅助端口)。这要看情况。驱动端口是一个抽象(接口),用于执行由应用程序外部的外部参与者执行的任务。如果这样的任务是独立于任何域的逻辑,那么端口接口属于应用程序层(例如用于身份验证和授权的端口)。如果任务是应用程序域的逻辑,则端口属于该域。