Architecture 洋葱架构-每个人都可以访问每个接口层(打破层依赖关系)?

Architecture 洋葱架构-每个人都可以访问每个接口层(打破层依赖关系)?,architecture,onion-architecture,hexagonal-architecture,Architecture,Onion Architecture,Hexagonal Architecture,我一直在研究和实现称为洋葱架构()的模式 有一件事让我怀疑我是否理解正确,那就是: 所有接口都在核心组件中定义。实现可以在其他程序集中实现,并将与IOC容器链接 由于所有接口都在核心中定义,并且所有程序集都引用核心,这是否意味着每个程序集都可以访问每个接口 也就是说,从理论上讲,您可以将UI服务导入DAL,因为DAL可以访问UI服务接口,并将由IOC容器解析 这不是有点违背了分层设计的目的吗?在传统模型中,这是不可能的,因为DAL程序集不引用UI程序集 我是否误解了某些东西,或者在洋葱架构(On

我一直在研究和实现称为洋葱架构()的模式

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

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

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

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

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

我是否误解了某些东西,或者在洋葱架构(Onion architecture)与普通的N层架构(N-tier architecture)相比,这种“滥用”是否可能

所有接口都在核心组件中定义。实施可能 将在其他大会上实施,并与国际奥委会挂钩 容器

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

因为所有接口都在核心中定义,所有程序集 参考核心,这是否意味着每个程序集都可以访问 每个接口

我不太明白你的问题,但我猜你的意思是:“一个层可以访问内层的任何接口吗?”答案是“可以”。不仅仅是内层,还有任何内层

也就是说,从理论上讲,您可以将UI服务导入DAL DAL可以访问UI服务接口,并且将拥有它 由IOC容器解决

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

这不是有点违背了分层设计的目的吗?在一个 传统模式由于DAL装配,这是不可能的 不引用UI程序集

是的,你说得对。这是因为图层是圆形的,而且在每个圆形中,图案都不表示拆分

我是不是误会了什么,或者这种“虐待”是可能的 在洋葱架构中,与普通的N层架构相比

你说得对

这就是六边形体系结构的区别:六边形更显式,并且您有不同的适配器,而不是层

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

所有接口都在核心组件中定义。实施可能 将在其他大会上实施,并与国际奥委会挂钩 容器

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

因为所有接口都在核心中定义,所有程序集 参考核心,这是否意味着每个程序集都可以访问 每个接口

我不太明白你的问题,但我猜你的意思是:“一个层可以访问内层的任何接口吗?”答案是“可以”。不仅仅是内层,还有任何内层

也就是说,从理论上讲,您可以将UI服务导入DAL DAL可以访问UI服务接口,并且将拥有它 由IOC容器解决

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

这不是有点违背了分层设计的目的吗?在一个 传统模式由于DAL装配,这是不可能的 不引用UI程序集

是的,你说得对。这是因为图层是圆形的,而且在每个圆形中,图案都不表示拆分

我是不是误会了什么,或者这种“虐待”是可能的 在洋葱架构中,与普通的N层架构相比

你说得对

这就是六边形体系结构的区别:六边形更显式,并且您有不同的适配器,而不是层

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


谢谢,这让事情变得更清楚了。“每个层都定义了接口”,这可能是我困惑的症结所在。我的印象是,所有接口都应该在核心(最内层)中定义,不管它是什么类型的接口。你是说DAL接口可以和DAL实现放在同一层?这将使它更“安全”。不,接口及其实现不在同一层。实现在外层。“在每一层中定义接口”是指每一层定义将由外层实现的接口。这并不意味着在所有层中都定义了相同的接口。DAL接口在域层中定义。DAL实现位于基础结构层。在某一层(如N层)定义一次接口。该接口的实现将位于N+1层,甚至位于外层(N+2,…)。“接口定义在每一层中”意味着并非所有接口都定义在一个层中,但每一层定义了某些接口,这些接口将由一个外层实现。谢谢,这让它更清楚了一点。“每个层都定义了接口”,这可能是我困惑的症结所在。我的印象是,所有接口都应在Cor中定义