洋葱架构-每个人都可以访问每个接口的层(破坏层的依赖性)吗?

时间:2018-12-12 18:35:01

标签: architecture onion-architecture hexagonal-architecture

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

以下是使我怀疑是否正确的一件事:

所有接口都在Core程序集中定义。实施可以在其他程序集中实施,并将与IOC容器链接起来。

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

即从理论上讲,您可以将UI服务导入DAL,因为DAL可以访问UI服务界面,并由IOC容器对其进行解析。

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

是我误解了什么吗?还是在洋葱架构中,与普通的N层架构相比,这种“滥用”可能发生?

1 个答案:

答案 0 :(得分:2)

  

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

接口在每层中定义,并在任何外层中实现。因此,一层取决于其中的所有层。层数不是固定的,您可以拥有所需的层数。如果用汇编的方式表示一个jar文件,则每一层都有一个组合。

  

由于所有接口均在Core中定义,并且所有程序集   参考Core,是否暗示每个程序集都可以访问   每个界面?

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

  

即从理论上讲,您可以将UI服务导入DAL,因为   DAL有权访问UI服务界面   由IOC容器解决

是的,您可以做到。您虽然不应该,但是该体系结构允许这样做。

  

这不会破坏分层设计的目的吗?在一个   传统的模型,因为DAL组装,这是不可能的   没有引用UI程序集

是的,您是对的。发生这种情况是因为图层是圆形的,并且在每个圆形中,模式都没有说明对其进行分割。

  

是我误会了某些东西还是这种“滥用”   与普通的N层架构相对应?

你是对的。

与六边形体系结构的区别在于:六边形更加显式,并且您具有不同的适配器,而不是层。

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

Onion architecture compared to hexagonal