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架构
所带来的降低项目复杂度、解耦合的优点,是建立在架构复杂的基础上,需要花费一定时间去思考设计应用架构,不利于中小型软件的快速开发,调试起来也增加了复杂度,但这不影响它是最常用的架构设计。
MVC
在 nest
的体现
默认情况下,Nestjs
使用 Express
库作为底层依赖,因此,在 Express
中使用的 MVC
模型的每种技术同样适合 Nestjs
。
Nestjs
的 MVC
方案更接近 Spring MVC
,传统的模型层被拆分为了业务层-service,和数据访问层-DAO;控制器依旧扮演分发调度请求的角色,控制路由请求的进出;而视图层被淡化(因为前后端分离的缘故),但是你几乎可以在 Nestjs
中使用各类视图引擎,比如 hbs(handlebars.js)
。
可以简单理解为:
- *.controller:控制器,用户访问时最先经过,由控制器调度分发处理任务。
- *.service:业务层,由模型拆分出来,封装业务实现方法。
- *.entity:持久化对象,映射数据库表的对象,和service业务层共同组成模型。
- *.module:模块,组成
Nestjs
应用的基础应用。 - *.dto:数据传输对象,比如请求传递过来的请求体参数对象。