Skip to content

MVC架构

概念

架构模式是一个通用的、可重用的解决方案,MVC 是一种架构的思想,不是具体的实现。

模型-视图-控制器的模式,也称为 MVC(model-view-controler) 模式,是一种业务逻辑、数据、视图显示分离的组织代码的方式。

它把软件系统分为三个部分:

  • M(Model) :负责具体的业务实现,完成对数据的查询,常见的 MVC 框架将 model 拆分为业务层、模型层。
  • V(View):展示视图,展示模型中的数据,在前后端未分离前,最具代表的就是 jsp 技术。
  • C(Controller):控制器,负责搜集客户端的请求,分发调度客户端的请求,处理请求和响应数据。

常见的基于 MVC 架构模式的框架有:Struts、Spring MVC

一次完整的客户端请求流程:

请求流程图

名词解释

名称概括用途
PO持久化对象数据表映射对象,表的字段与PO对象属性一一对应
VO值对象用于业务层之间的数据传递,比如响应给客户端的数据对象
DTO数据传输对象经过处理后(增加/减少属性)的PO对象,用于跨进程或网络传输的对象载体,比如前端传过来的请求体参数
DAO数据访问对象业务层提供接口,负责与数据库进行交互,封装简单的 CRUD 方法,也就是service对象
BO业务对象对DAO封装后的对象,可以是包含一个或多个对象,比如多对多关系的BO对象
POJO简单对象基本的对象,拥有getter、setter方法

在上面花了一些篇幅介绍了 MVC 架构的概念,为什么需要它呢?

首先明确一点,一个应用发展到庞大的体量时,如果不进行解耦分层设计,那么带来的维护难度将是不可估量的,耦合度也很高,比如在 PHP 还不支持面向对象之前,这三层的代码就是杂糅在一起的,十分混乱。为了解决这个痛点,MVC 架构出现了,而且普遍应用于市场上的很多互联网应用程序。

INFO

一个架构或技术的出现,必定伴随着它的利与弊,MVC架构 所带来的降低项目复杂度、解耦合的优点,是建立在架构复杂的基础上,需要花费一定时间去思考设计应用架构,不利于中小型软件的快速开发,调试起来也增加了复杂度,但这不影响它是最常用的架构设计。

MVCnest 的体现

默认情况下,Nestjs 使用 Express 库作为底层依赖,因此,在 Express 中使用的 MVC 模型的每种技术同样适合 Nestjs

NestjsMVC 方案更接近 Spring MVC ,传统的模型层被拆分为了业务层-service,和数据访问层-DAO;控制器依旧扮演分发调度请求的角色,控制路由请求的进出;而视图层被淡化(因为前后端分离的缘故),但是你几乎可以在 Nestjs 中使用各类视图引擎,比如 hbs(handlebars.js)

可以简单理解为:

  • *.controller:控制器,用户访问时最先经过,由控制器调度分发处理任务。
  • *.service:业务层,由模型拆分出来,封装业务实现方法。
  • *.entity:持久化对象,映射数据库表的对象,和service业务层共同组成模型。
  • *.module:模块,组成 Nestjs 应用的基础应用。
  • *.dto:数据传输对象,比如请求传递过来的请求体参数对象。

如有转载或 CV 的请标注本站原文地址