Architecture 洋葱型结构与六角形结构的比较

Architecture 洋葱型结构与六角形结构的比较,architecture,software-design,onion-architecture,hexagonal-architecture,Architecture,Software Design,Onion Architecture,Hexagonal Architecture,它们之间有什么不同吗(洋葱|六角形),据我的理解,它们都是一样的,它们关注的领域是应用程序的核心,应该是技术/框架不可知的 如果有的话,它们之间有什么区别 此外,我认为使用其中一种架构比使用另一种架构,甚至与N层架构相比,没有什么真正的优势,如果做得不好,只遵循其中任何一种架构都不会有任何区别 使用一个比另一个有什么好处?为什么要使用它?什么时候使用 感谢分层体系结构与洋葱相关的体系结构系列之间存在差异。分层体系结构使用用户界面和数据访问层之间的分层关系。相反,洋葱架构将UI和数据访问视为同一层

它们之间有什么不同吗(洋葱|六角形),据我的理解,它们都是一样的,它们关注的领域是应用程序的核心,应该是技术/框架不可知的

如果有的话,它们之间有什么区别

此外,我认为使用其中一种架构比使用另一种架构,甚至与N层架构相比,没有什么真正的优势,如果做得不好,只遵循其中任何一种架构都不会有任何区别

使用一个比另一个有什么好处?为什么要使用它?什么时候使用


感谢

分层体系结构与洋葱相关的体系结构系列之间存在差异。分层体系结构使用用户界面和数据访问层之间的分层关系。相反,洋葱架构将UI和数据访问视为同一层的一部分

为什么用户界面和数据访问在同一层上?洋葱架构的核心是领域及其业务逻辑。这是主要焦点。域不在任何其他层之上或之下。它就是中心。用户界面、rest端点等都是域的次要部分,就像数据存储库一样

(六边形体系结构的另一个名称)通过其名称明确了这一点:有任意数量的端口充当域和外部之间的接口。适配器实现端口,以便端口可以与域交互


编辑:我理解“洋葱架构将UI和数据访问视为同一层的一部分”这句话可以用不同于预期的方式来解释。关键是,在洋葱架构中,用户界面和数据访问功能并不像分层架构那样处于层次关系中

如果有的话,它们之间有什么区别

洋葱:存在层,依赖项始终指向内部,即层可以使用其中的任何层。内层是域模型,外层是基础设施,但层之间的层数可能会有所不同

Hexagon(它是原始名称“端口和适配器”的替代名称):没有层。您拥有应用程序、端口和适配器。端口属于应用程序,它们是应用程序的API/SPI。适配器位于应用程序外部,每个适配器都依赖于应用程序的一个端口

有些人感到困惑的是,在实现六边形体系结构时,大多数人并没有将每个适配器物理地放在一个工件中,而是将所有适配器放在一个工件中(如基础结构层)。此外,它们还依赖于整个应用程序上的适配器,而不仅仅是它们使用的端口。所以它实际上是一个洋葱

实现适配器应该将适配器彼此分开,并且每个适配器应该仅取决于它使用/实现的端口(取决于端口是驱动程序还是受驱动)

另一个区别是六边形没有说明六边形内部的结构(应用程序)

使用其中一个的好处是什么

Hexagon的好处是它更加模块化,组件之间有一个清晰的分离,防止它们之间的代码泄漏。另一方面,洋葱在这个意义上更危险,因为您可以直接从UI访问数据库(它们都属于同一层)

洋葱的好处来自上述。因为有很多工件,如果项目很大,整个项目的构建应该需要很多时间

你为什么要用它?什么时候使用

使用这两种方法中的任何一种方法的意义在于,您只关注您试图解决的实际问题,而不使用任何技术或框架。应用程序与技术无关,并且很容易从一个框架迁移到另一个框架。因此,它们都被称为“干净的”体系结构。您的应用程序核心没有框架代码、注释等

所以。。。为什么要使用它们

因为您提高了可维护性、可测试性,并且拥有干净的代码

什么时候使用它们

我宁愿说什么时候不使用它们。如果你正在开发的应用程序并不复杂,例如,它只是一个积垢,也许它不值得使用它们

就个人而言,我喜欢“端口和适配器”胜过其他


希望我的解释能有所帮助。

前面的答案对洋葱架构的说法从根本上是错误的。他们断言“在洋葱中,UI和数据访问是同一层的一部分”。这种混乱可能来自于认为所有层次都在与上面和下面的一切对话

实际上,洋葱图不能很好地表示洋葱架构。关键在于核心域层对任何周围层都是不可知的,而周围层通常也彼此不可知。通常这意味着UI与服务对话,服务与数据层和域层对话。UI不直接与其他层交互,层交互通过使用依赖项注入和接口分离进行抽象

据我所知,没有任何体系结构模式建议混合数据访问和UI(有些模式,例如混合业务和数据访问)。另外,还有一些技术可以生成避免分层的代码——快速开发工具通常可以做到这一点,但这些工具更倾向于加快部署速度,而不是设计和可维护性

洋葱、六角形、端口和适配器实际上是同一概念架构的不同名称。


马克·西曼(MarkSeeman)有一篇很好的帖子,帮助澄清这些差异(如果有的话)是如何边缘化和语义化的:

六边形架构,也称为