0

我一直在研究和实现被称为洋葱架构(http://jeffreypalermo.com/blog/the-onion-architecture-part-3/)的模式。

如果我理解正确,让我质疑的一件事是:

所有接口都在核心程序集中定义。实现可以在其他程序集中实现,并将与 IOC 容器链接。

由于所有接口都在 Core 中定义,并且所有程序集都引用 Core,这是否意味着每个程序集都可以访问每个接口?

即,理论上您可以将 UI 服务导入 DAL,因为 DAL 可以访问 UI 服务接口并将其由 IOC 容器解析。

这不是有点破坏分层设计的目的吗?在传统模型中,这是不可能的,因为 DAL 程序集不引用 UI 程序集。

我是否误解了某些东西,或者这种“滥用”在 Onion 架构中是否可能与普通的 N 层架构相反?

4

1 回答 1

2

所有接口都在核心程序集中定义。实现可以在其他程序集中实现,并将与 IOC 容器链接。

接口在每一层中定义,并在任何外层实现。所以一个层依赖于它里面的所有层。层数不固定,你可能有你想要的层数。如果通过程序集你的意思是一个 jar 文件,那么每一层都会有一个程序集。

由于所有接口都在 Core 中定义,并且所有程序集都引用 Core,这是否意味着每个程序集都可以访问每个接口?

我不太理解您的问题,但我想您的意思是:“层可以访问内层的任何接口吗?” 答案是“是”。不仅是内层,而是任何内层。

即理论上您可以将 UI 服务导入 DAL,因为 DAL 可以访问 UI 服务接口,并将由 IOC 容器解决它

是的,你可以做到。你不应该这样做,但架构允许这样做。

这不是有点破坏分层设计的目的吗?在传统模型中这是不可能的,因为 DAL 程序集不引用 UI 程序集

是的你是对的。之所以会出现这种情况,是因为图层是圆圈,并且因为在每个圆圈中,模式都没有说明分割它。

我是否误解了某些东西,或者这种“滥用”在 Onion 架构中是否可能与普通的 N 层架构相反?

你说的对。

这就是六边形架构的区别:六边形更明确,你有不同的适配器,而不是层。

在这里,您有另一个关于洋葱与六角形相比的问题和答案:

洋葱结构与六边形相比

于 2018-12-20T05:19:40.030 回答