在 Clean Architecture 中,UI 代码在哪一层?

Posted

技术标签:

【中文标题】在 Clean Architecture 中,UI 代码在哪一层?【英文标题】:In Clean Architecture, in which layer does UI code go? 【发布时间】:2016-04-24 10:58:17 【问题描述】:

我正在阅读 Bob Martin (https://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html) 的 Clean Architecture 文章,我发现这对我来说似乎很矛盾。

架构的视觉表示在最外层列出了“UI” - 这意味着它是“框架和驱动程序”的一部分,它是外部的。

然而,当他详细阐述从那一层开始的一层——称为接口适配器——时,他说“它是 [接口适配器] 层......它将完全包含 GUI 的 MVC 架构。演示者、视图和控制器都属于这里。”说接口适配器层包含视图让我觉得 UI 属于那里。

那么哪一层是用来存放特定于 UI 的代码的呢?

【问题讨论】:

【参考方案1】:

这种混乱的发生是因为 UI 有两个方面:

一个是 UI 的具体“物理”方面,它特定于某个操作系统或交付机制(例如 Web)。这部分 UI 涉及如何向用户显示事物,以及如何捕获用户操作。

UI 的另一部分涉及向用户显示什么以及要收听什么用户操作。

Uncle Bob 有效地将 HOW 和 WHAT 分开。

UI 的 WHAT 方面属于“接口适配器”层。您在那里生成的视图决定了您向用户显示的信息。

HOW 方面属于“框架和驱动程序”层。目标是,如果您想为您的用户提供两种用户体验 - 一个 Web 应用程序和一个移动应用程序 - 您只需要编写外层的两个版本,但内层不需要更改,或者只需需要稍微改变一下。

【讨论】:

非常感谢。我必须写下 100 个依赖关系图,试图从他的博客中找出 UI 和 View 之间的分离属于哪里。【参考方案2】:

我认为这与区分间接层相比并不矛盾。 Interface Adapters 用于将内部表示转换为外部表示,但外部表示需要与 Framework 和 Drivers 层交互。因此,虽然与 MVC 框架交互的应用程序代码位于接口适配器层,但它调用的 API 和呈现发生在框架和驱动程序层。

因此,建议不要将这些问题混在一起,这样可以更容易地独立于框架进行测试和发展。

【讨论】:

以上是关于在 Clean Architecture 中,UI 代码在哪一层?的主要内容,如果未能解决你的问题,请参考以下文章

清晰架构(Clean Architecture)的Go微服务: 事物管理

Clean Architecture

Clean Architecture

Clean Architecture

Clean Architecture

清晰架构(Clean Architecture)的Go微服务: 依赖注入(Dependency Injection)