type
status
date
slug
summary
tags
category
icon
password
😀
MVC represents Model、View、Controller
在理解后端框架时,突然弄不清controller层和middleware层有什么区别,有点混淆,MVC架构之前也只是简单了解了一下,现在拿出来重新看看还是很有必要的,毕竟我也忘记View是一个怎样的概念了。
先抛砖引玉一下,controller可以作为middleware吗?
The Answer is YES !!!

📝 主旨内容

MVC是什么?

MVC架构是一种用于设计和开发软件应用的模式,尤其是图形用户界面(GUI)应用。MVC代表模型(Model)、视图(View)和控制器(Controller)。这种架构将应用分为三个主要的组件,目的是实现关注点分离。这样做可以让应用的用户界面业务逻辑分离,从而使代码更容易管理和维护。

组件说明

  1. 模型(Model)
  • 模型代表应用的数据逻辑。它直接管理数据、逻辑和应用的规则,通常是对数据库的直接映射。模型负责访问存储数据的逻辑,以及对数据的添加、修改、删除等操作。
  • 模型不包含任何有关数据如何展示给用户的信息。
  1. 视图(View)
  • 视图是用户界面的组成部分。它负责展示数据(即模型)给用户,并且确保用户界面是更新的。
  • 视图通常是依据模型数据创建的,但它不直接进行任何处理逻辑。它只是展示数据,并发送用户命令(例如鼠标点击)给控制器。
  1. 控制器(Controller)
  • 控制器作为模型和视图之间的中介。它监听来自视图的输入,并执行对模型的更新或处理,可能会导致视图的改变。
  • 控制器接收用户的输入(通过视图),处理输入(可能涉及模型的更改),并通过视图反馈输出。

MVC的工作流程

  1. 用户通过视图层进行操作,操作的请求发送给控制器。
  1. 控制器解析用户的操作,确定需要调用模型的哪些操作来处理请求。
  1. 模型执行业务逻辑处理后,将数据返回给控制器。
  1. 控制器接收模型传来的数据,选择适当的视图。
  1. 视图使用模型数据,渲染展示给用户。

MVC的优点

  • 关注点分离:MVC提供了清晰的应用逻辑和界面的分离,使得管理复杂应用更加容易。
  • 促进模块化:可以独立地开发、测试和维护每个组件。
  • 提高可复用性:由于应用逻辑和界面分离,开发者可以重用大量的代码。
  • 灵活性:更改应用的视图不影响模型实现,反之亦然,这使得应用更加灵活。

Controller层的作用

在典型的MVC(Model-View-Controller)架构中,Controller层的作用主要是处理应用逻辑,它充当模型(Model)和视图(View)之间的协调者。Controller接收来自客户端的请求,决定使用哪个模型去处理请求,然后选择视图来展示处理结果。简而言之,Controller负责处理用户的输入,调用相应的模型进行数据处理,最后选择合适的视图进行显示。
  1. 请求分发:Controller层负责接收客户端的请求,并根据请求的类型(如GET、POST等)将其分发到对应的处理函数。
  1. 业务逻辑处理:Controller调用Model层的函数进行数据处理,如数据库的CRUD操作,并根据处理结果进行逻辑判断或计算。
  1. 视图渲染:根据业务逻辑的处理结果,Controller选择并渲染相应的视图或返回响应数据给客户端。
  1. 错误处理:Controller层也负责处理业务逻辑过程中出现的错误,并作出相应的响应。
 

区分中间件和Controller

虽然在技术上Controller层的函数可以作为中间件使用,但它们的目的和职责是有区别的:
  • 中间件主要用于处理通用的任务,如请求日志记录、错误处理、身份验证等,它们通常在多个路由之间共享。
  • Controller则专注于处理特定的业务逻辑,每个Controller通常对应于应用中的一个特定功能模块。

🤗 总结归纳

在设计应用程序时,保持清晰的职责分离是很重要的。这不仅有助于维护代码的组织性和可读性,还能提高代码的可重用性和可测试性。
关于中间件,它的分类其实有很多种,有专注于错误处理的,参数校验的,甚至还有一些可以返回给服务端信息的,以后有时间可以学习学习。
 
💡
有关这篇博客的任何问题,欢迎您在底部评论区留言,我会在github邮箱中第一时间收到邮件,让我们一起交流~
MNIST数据集手写体识别Joi——数据校验库
  • Giscus
Zachary_Yang
Zachary_Yang
一个普通的干饭人🍚
Announcement
🎉欢迎来到我的博客🎉
-- 亲爱的读者们,你们好! ---
👏在这里,我希望能够和你们一起分享我对生活的观察、对技术的理解和热爱,暂将博客分为以下几个栏目👏
🌿 心绪漫卷边:一些小随笔
🌌 智绘非遇路:AI领域
😊 浅笑编程边:前后端开发
🛠 技术汇流石下:零散技术分享

祝好,
Zachary_Yang