这块内容是软件工程课上学的,当时有一个简单的C++学生信息管理系统课程设计但是没有什么深入的体会.
到后来继续学习Flask/Python后端开发之后遇到问题才再次入学习思考.
时至今日,也只有比较粗浅的理解.
一般我们把一个软件工程拆分成Model,View,Controller三个部分
- Model负责数据结构的构建,对接数据库
- View负责用户界面,比如页面和路由
- Controller负责控制程序流程,响应用户传过来的请求,对Model进行修改
在当今前后端分离,前端工程化的浪潮下,MVC的功能在前后端也做了拆分.
就我目前所知来说.
一般后端仅需处理Model和Controller,也就是处理好数据库和各项服务,提供接口即可.
View的任务,具体的页面设计和路由是交给前端来实现的.
但这并不是说前端就不需要了解Model,后端不需要配置路由转发.
前端也是需要建立对应的Model的,在调用API拿到data后,反序列化回一个对象,并在此基础上进行渲染.只是具体的数据修改通过API交给后端来处理了.
同样的,后端也需要通过路由把具体的函数和URL地址链接起来.可以理解为,后端不是没有View,而是具体的渲染页面的任务交给了前端,与此同时后端负责提供用于渲染View所需的API.
前后端的分离,使得项目可以前后端并行进行开发,大大提高了开发效率.
同时,前后端的分离也使得页面逻辑和业务逻辑得到了拆分,降低了程序的耦合性,提高了项目的稳定性,可维护性.
而且,把用户设备的运算资源利用了起来,降低了服务端负担.
MVC的分离则很好地划分了数据,功能和界面,使得结构变得简单直观,各有所长的程序员也能在擅长的部分各司其职.因此,这样的划分也极大的地提高了程序的可扩展性.
在看了一些项目之后,我发现绝大多数后端程序都是按照MVC架构来开发的.但是每个人的理解都会多多少少有些不同.最后,我找到比较认可的一种是:
Model:单纯存放数据结构
Service:提供具体小的功能模块,比如调用Model建立一个对象,再向数据库写入
Controller:集合Service中各个小的功能模块,组合成一个大的功能,比如注册的Controller就可以拆分成对账号密码的验证,添加用户到数据库,发送激活邮件等多个Service的集合
与此同时,也需要通过route将Controller和具体的URL绑定起来,提供API