我一直在研究和实现称为洋葱架构(http://jeffreypalermo.com/blog/the-onion-architecture-part-3/)的模式。
以下是使我怀疑是否正确的一件事:
所有接口都在Core程序集中定义。实施可以在其他程序集中实施,并将与IOC容器链接起来。
既然所有接口都在Core中定义,并且所有程序集都引用Core,这是否意味着每个程序集都可以访问每个接口?
即从理论上讲,您可以将UI服务导入DAL,因为DAL可以访问UI服务界面,并由IOC容器对其进行解析。
这不会破坏分层设计的目的吗?在传统模型中,这是不可能的,因为DAL程序集未引用UI程序集。
是我误解了什么吗?还是在洋葱架构中,与普通的N层架构相比,这种“滥用”可能发生?
答案 0 :(得分:2)
所有接口都在Core程序集中定义。实现可能 在其他程序集中实施,并将与IOC链接 容器。
接口在每层中定义,并在任何外层中实现。因此,一层取决于其中的所有层。层数不是固定的,您可以拥有所需的层数。如果用汇编的方式表示一个jar文件,则每一层都有一个组合。
由于所有接口均在Core中定义,并且所有程序集 参考Core,是否暗示每个程序集都可以访问 每个界面?
我不太理解您的问题,但我想您的意思是:“层可以访问内部层的任何接口吗?”答案是“是”。不仅是内层,而且是任何内层。
即从理论上讲,您可以将UI服务导入DAL,因为 DAL有权访问UI服务界面 由IOC容器解决
是的,您可以做到。您虽然不应该,但是该体系结构允许这样做。
这不会破坏分层设计的目的吗?在一个 传统的模型,因为DAL组装,这是不可能的 没有引用UI程序集
是的,您是对的。发生这种情况是因为图层是圆形的,并且在每个圆形中,模式都没有说明对其进行分割。
是我误会了某些东西还是这种“滥用” 与普通的N层架构相对应?
你是对的。
与六边形体系结构的区别在于:六边形更加显式,并且您具有不同的适配器,而不是层。
与六角形洋葱相比,这里还有另一个关于洋葱的问题和答案: