洋葱每个层都能访问每个接口吗(打破层依赖关系)



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

有一件事让我怀疑我是否理解正确,那就是:

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

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

也就是说,理论上你可以将UI服务导入DAL,因为DAL可以访问UI服务接口,并将由IOC容器解决。

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

我是不是误解了什么,或者这种"滥用"在洋葱架构中与普通的N层架构相比是可能的?

所有接口都在Core程序集中定义。实施方式可能将在其他大会上实施,并将与国际奥委会联系起来容器

接口在每一层中定义,并在任何外层中实现。所以一个层取决于它里面的所有层。层的数量不是固定的,你可能有你想要的层。如果您所说的汇编是指一个jar文件,那么每一层都将有一个汇编。

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

我不太理解你的问题,但我猜你的意思是:"一个层可以访问内层的任何接口吗?"答案是"可以"。不仅仅是内层,而是任何内层。

即理论上您可以将UI服务导入DAL,因为DAL可以访问UI服务接口,并将拥有它由国际奥委会集装箱解决

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

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

是的,你说得对。这是因为层是圆形的,因为在每个圆形中,图案都没有说明要拆分它

我是误解了什么,还是可能发生这种"滥用"在洋葱架构中,而不是普通的N层架构?

你说得对。

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

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

洋葱架构与六边形的比较

最新更新