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



我知道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/其中解释了: 请务必注意,端口(接口(属于业务逻辑内部,而适配器属于外部。那么,如果我非常了解所有接口都必须放在域文件夹中?

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

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

从动端口(辅助端口(。这里视情况而定。受驱动端口是一个抽象(接口(,用于执行由应用程序外部的外部参与者执行的某些任务。如果此类任务是独立于任何域的逻辑,则端口接口属于应用层(例如用于身份验证和授权的端口(。如果任务是应用程序域的逻辑,则端口属于域。

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

最新更新