我一直在研究和实现被称为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层架构?
你说得对。
这就是六边形架构的区别:六边形更明确,并且有不同的适配器,而不是层。
这里有另一个关于洋葱与六边形相比的问题和答案:
洋葱架构与六边形的比较