通过在酒吧点饮料来解释模型-视图-控制器(MVC)

2025-06-07

通过在酒吧点饮料来解释模型-视图-控制器(MVC)

如果你去过酒吧,那么 MVC 就没那么难了。

模型-视图-控制器 (MVC) 框架是构建现代 Web 应用程序的关键组成部分。走进一个 Web 开发者的房间,你很可能会被各种提及 Ruby on Rails、Angular 或 Django 的词句所淹没。

更一般地说,MVC 逻辑可用于描述几乎任何使用 PHP、Ruby、Python 或 JavaScript 等语言的 Web 开发过程。

尽管如此…

许多 Web 开发者都面带微笑,努力钻研这个神秘的世界。当资深开发者或队友需要查看其中一位开发者的代码时,他们会立即发出一声“呼喊”,然后迅速讲解一些常见的编码实践。

这可不是活该!其实,现代 Web 开发中的 MVC 模式,就好比跟调酒师点一杯酒,就能轻松解释清楚。没错,如果你去过酒吧,就能理解所有 Web 应用都共有的这种主要结构模式。

勇敢地突破障碍,直到现实来临

什么是 MVC 模式?

  • 模型:以可靠的形式构建您的数据,并根据控制器的指令进行准备
  • 视图:根据用户的操作,以易于理解的格式向用户显示数据
  • 控制器:接收用户命令,向模型发送命令以更新数据,向视图发送指令以更新界面。

或者,以图表形式:


图片来源:Real Python

太无聊了。去酒吧吧。

一名初级 Web 开发人员走进一家酒吧……

周五晚上,你走进一家酒吧,走向酒保。由于酒吧里已经挤满了人,你挤过人群,终于引起了酒保的注意,脱口而出:“一杯曼哈顿!”

你是用户,你点的饮料就是用户请求。对你来说,曼哈顿只是你最喜欢的饮料,而且你非常确定这会是一杯香甜可口的饮料。

调酒师迅速点了点头。对调酒师来说,曼哈顿并非一杯美味的饮品,它只是一系列步骤:

  1. 抓住玻璃
  2. 添加威士忌
  3. 添加苦艾酒
  4. 添加苦味剂
  5. 搅拌饮料
  6. 添加樱桃
  7. 索要信用卡并付款。


图片来源:维基百科

调酒师的大脑就是控制器。只要你用他们能理解的语言说出“曼哈顿”这个词,工作就开始了。这项工作本质上类似于制作玛格丽特或草莓代基里酒,但使用的原料截然不同,绝不会混淆。调酒师只能使用吧台后面的工具和资源。这套有限的工具就是模型包括以下内容:

  • 调酒师的手
  • 摇动器/混合设备
  • 酒类
  • 混合料
  • 眼镜
  • 装饰

也许在更高档的酒吧,他们可能会有机器人助手!或者自动调酒器。这对你的调酒师来说无关紧要,他只能利用现有的资源。

最后,你能看到并且喝到的成品饮品就是**视图**。**视图是基于模型中有限的选项构建的,并通过控制器(也就是调酒师的大脑)进行排列和传输。

经验教训

  • 还想再喝一杯吗?对着空杯子和美景大喊大叫绝对没用。你得跟酒保说一声。
  • 从调酒师收到请求到开始调制饮品之间的时间应该尽可能短。这有时被称为“瘦控制器”——换句话说,控制器应该包含最少的逻辑,并尽可能多地委托模型。优秀的调酒师不仅会记住配方,还会每晚以可靠的方式准备原料和工具,以便在顾客开始点单后,只需进行最少的搜索和整理。
  • 调酒师能把所有原料直接倒进顾客嘴里,然后指望顾客漱口调好酒吗?是的,我想是有可能的。你应该尽可能地把逻辑放在模型里,而不是视图里。换句话说,在吧台后面调酒比在顾客嘴里调酒更可取。


图片来源:Xperience

  • 如果你点了啤酒,调酒师几乎不需要做任何事情。也许他们会直接打开瓶盖,把酒递给你。话虽如此,你仍然需要向调酒师提出要求。啤酒不会凭空出现在你面前。

将其与 Web 开发联系起来

以下是相同过程在现代 Web 应用中的实现方式:

  • 用户沿着一条路线发出请求,比如说 /home。
  • 控制器接收此请求并给出一组与该路由相关的特定指令。这些指令可以是用于视图更新或提供特定页面,也可以是用于模型执行特定逻辑。我们假设此请求包含一些与之相关的逻辑。
  • 该模型执行逻辑,从数据库中提取数据并根据控制器的指令发回一致的响应。
  • 然后控制器将该数据传递给视图以更新用户界面。

每当请求到达时,它必须先到达控制器,然后才能转换为视图或模型的指令。如果您想了解更多信息, Ruby on Rails 维基百科文章包含进一步的概述。

每当你需要学习一个新的 Web 开发框架时,你都会遇到这种一致的 MVC 模式。如果某个框架与此不同,你可以确信作者会引用 MVC 来解释他们的新模式。

这应该会使学习变得容易得多——一旦你使用 MVC 进行开发,每个新框架都可以适应你的舒适区。

你喜欢这篇指南吗?请在评论区留言,或者访问CodeAnalogies 博客

文章来源:https://dev.to/kbk0125/model-view-controller-mvc-explained-through-ordering-drinks-at-the-bar--32jm
PREV
重温痛苦:没有 Git 的世界
NEXT
外出就餐并了解 Express.js 的基础知识