DDD:在何处放置接口(端口)

时间:2018-06-22 09:11:07

标签: domain-driven-design

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

2 个答案:

答案 0 :(得分:0)

我将把 context 称为一个空间,该空间可以是包,文件夹或可用于分隔概念的任何容器。
您应该将每个接口放在由其目的决定的上下文中。
可以将诸如ICommandBus之类的通用接口放入“基础结构”上下文中,如果该接口在域上下文中具有更特定的上下文,则可以在该域上下文中提供域行为。
这种接口就像上下文之间的桥梁,因此,每个上下文都有自己的接口,这些接口提供在不同上下文中实现的功能。

答案 1 :(得分:0)

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

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

驱动端口(辅助端口)。在这里取决于。从动端口是一种抽象(接口),用于执行由应用程序外部的actor执行的某些任务。如果此类任务是独立于任何域的逻辑,则端口接口属于应用程序层(例如,用于身份验证和授权的端口)。如果任务是您应用程序域的逻辑,则该端口属于该域。