清洁架构与洋葱架构

Posted

技术标签:

【中文标题】清洁架构与洋葱架构【英文标题】:Clean Architecture vs Onion Architecture 【发布时间】:2014-06-22 04:36:31 【问题描述】:

我一直在阅读Onion Architecture,今天我发现了鲍勃叔叔的Clean Architecture。

在我的一生中,我看不出它们之间有任何区别,它们看起来相同(命名约定除外)。

这两种建筑风格有什么不同吗?如果是的话,请给我解释一下好吗?

干杯

【问题讨论】:

【参考方案1】:

术语“清洁架构”只是文章的名称。洋葱架构是文章中解释的概念的具体应用。

【讨论】:

在联合架构中,模型位于中心,然后在其上构建存储库,然后基于存储库进行服务,然后在服务层之上提供演示者、API 和测试器。但是在干净的架构上,我们以实体为核心,最重要的是用例(我不确定),然后是控制器、网关和演示器,最重要的是 IO 设备(数据库、文件系统,Web,Devices,(不确定“UI”。可能是UI生成器)),通过听鲍勃叔叔的话,它们应该作为插件附加,基于应用程序构建,而不是基于它们构建的应用程序。【参考方案2】:

它们看起来确实相似,并且用于实现相同的目标,主要是可测试性和关注点分离,但您应该注意到,鲍勃叔叔的清洁架构更以用例为中心。

【讨论】:

【参考方案3】:

诸如干净、六边形和洋葱之类的架构具有相同的目标,但在实现上存在一些差异。

    独立于框架。该架构不依赖于某些功能丰富的软件库的存在。这使您可以将此类框架用作工具,而不必将系统塞进其有限的约束中。 可测试。可以在没有 UI、数据库、Web 服务器或任何其他外部元素的情况下测试业务规则。 独立于用户界面。 UI 可以轻松更改,而无需更改系统的其余部分。例如,可以用控制台 UI 替换 Web UI,而无需更改业务规则。 独立于数据库。您可以将 Oracle 或 SQL Server 换成 Mongo、BigTable、CouchDB 或其他东西。您的业​​务规则未绑定到数据库。 独立于任何外部机构。事实上,您的业务规则根本不了解外部世界。

在所有架构中,目标是允许最稳定的东西不依赖于不太稳定的东西会更频繁地变化。

更重要和更稳定的层是域。

这在这些架构中更为重要,那么如果对于洋葱来说,用于协调从用户界面输入到基础设施、域等的对象是一个应用程序服务,或者如果在干净的架构中是一个交互器,那么这些都是小细节。

【讨论】:

以上是关于清洁架构与洋葱架构的主要内容,如果未能解决你的问题,请参考以下文章

将 ASP.NET 身份与核心域模型解耦 - 洋葱架构

DDD—分层架构洋葱架构六边形架构

在洋葱、六边形或干净架构中,域模型是不是可以包含与数据库中的域模型不同的属性?

清洁代码,清洁架构和清洁项目布局/项目结构

DDD和“洋葱架构”是啥关系?

洋葱架构中的典型层是啥?