本文介绍: 1,Client发送request至Server端。2,Server端接收request后,交由特定的Router的function接收,并调用相对应的Controller。3,通过相对应的Controller的 function调用特定的model进行处理。4,若该request需要与DB来进行数交互,则从DB中数据交互,并将数据回传至Model中。若无则直接在Controller处理业务逻辑。5,待Model处理数据逻辑后,将其结果回传至Controller。

Node.js后端架构:MVC模式

什么是MVC

MVC (Model-View-Controller) 是一种软件设计模式用于应用程序逻辑分离成三个不同的组件模型视图控制器

MVC的优点在于它能够将应用程序的不同部分分离开来,使得代码更易于维护和扩展通过将数据逻辑展示逻辑和用户交互逻辑分离开来,开发人员可以更好组织管理代码。

在这里插入图片描述

Node.js中的MVC

在Node.js的后端开发中,使用MVC模式可以帮助我们更好组织管理代码。我们可以将数据逻辑放在模型中,将展示逻辑放在视图中,将用户交互逻辑放在控制器中。这样,我们可以更好地分离关注点,使得代码更易于理解和维护。

注意:如果只是开发API,第5步骤将会变成将数据返回给控制器,并由控制器将数据转换为API响应格式然后响应发送客户端视图的生成步骤可以省略,因为API不需要生成HTML文件

快速创建Express中的 MVC

在Express中,使用快速建立开发环境方式生成Express项目时,MVC的工作方式如下

在这里插入图片描述

注意:如果只是开发API,第5步骤将会变成: 数据通过 Router直接给 Server端,视图的生成步骤可以省略,因为API不需要生成HTML文件

读者可以发现,借由Express快速建置开发环境的项目中,Router本身就会涵盖了controllermodel部分

快速建立开发环境的方式目录结构是:

.
├── app.js
├── bin
│   └── www
├── package.json
├── public
│   ├── images
│   ├── javascripts
│   └── stylesheets
│       └── style.css
├── routes
│   ├── index.js
│   └── users.js
└── views
    ├── error.ejs
    └── index.ejs

也就是说我们controllermodel部分都集中写routes 文件夹下。假设routes 文件夹中的index.js来说,其代码会是:

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
    // do something
    // 連接資料庫
    // 從資料庫將資料撈完後進行res.render的動作。
});

module.exports = router;

注释res.render 指Express中,让处理完的数据传送到view的指令

自定义 Express 中的MVC

使用Express的快速建置开发环境的项目,是还没有做到职责分离的动作我们可以试着将controllermodel加入其中,其运作会是:

在这里插入图片描述

注意:
如果只需要开发API,可以跳过第6步骤,并且第7步骤会变成:
通过ControllerModel处理完的结果交由server端。

那现在的目录结构如下

.
├── app.js
├── bin
│   └── www
├── controllers
│   ├── index_controller.js
├── models
│   ├── index_model.js
├── package.json
├── public
│   ├── images
│   ├── javascripts
│   └── stylesheets
│       └── style.css
├── routes
│   ├── index.js
│   └── users.js
└── views
    ├── error.ejs
    └── index.ejs

通过添加controllers和models文件夹,并让其中的JavaScript文件分别负责处理controllermodel的部分实现了职责分离。在controllers文件夹中的文件负责处理请求的业务逻辑,而在models文件夹中的文件负责数据库进行交互和处理数据。这样可以使代码更加模块化和可维护,提高开发效率和代码的可读性。

可以编写以下代码来处理请求路由逻辑:

  • routers文件夹中的index.js文件中,
const IndexController = require('../controllers/index_controller');

indexController = new IndexController();

router.get('/', indexController.sayHiController);
const IndexModel = require('../models/index_model');

indexModel = new IndexModel();

module.exports = class IndexController {
    sayHiController(req, res ,next) {
        // do something
        // 调用model中的函数,从数据库中获取数据
        // 使用res.json将数据作为响应发送给客户端
    }
}
module.exports = class IndexModel {
    sayHiModel(req, res ,next) {
        // 从数据库中查询数据
        //插入新的数据到数据库
        //更新数据库中的数据
        //删除数据库中的数据
        //对数据进行验证格式化
        //执行复杂的数据操作,如聚合联表查询
        //处理与数据相关的业务逻辑
    }
}

小结

MVC确实是一种理念设计模式,而不是一种具体的技术。它的目的是将应用程序的不同部分分离开来,使代码更加模块化、可维护和可扩展

在实际开发中,如何分离整个程序的职责是根据具体情况而定的。每个项目都有不同的需求约束,因此选择适合项目架构设计模式非常重要。与后端开发团队进行沟通和协商,共同决定如何进行开发是至关重要的。

除了MVC,还有其他的架构设计模式可以用于开发,如MVVM、MVP、Clean Architecture等。选择合适的架构设计模式取决于项目的规模、复杂性和团队技术栈和经验。

总之,开发团队应该根据项目需求和团队的实际情况,选择适合的架构设计模式,并进行良好的沟通和协作,以确保项目的成功和代码的质量

原文地址:https://blog.csdn.net/wu_fei_yu/article/details/134739256

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_23820.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注