Web开发学习手记(三):MVC架构
前言
在Web开发实践中,我尝试使用MVC架构进行了一次完整的后端开发。
这篇文章记录我对MVC架构的理解和实例。
MVC结构
MVC是指Model-View-Controller,即将一个项目中的数据、业务逻辑、展示三部分分开。在处理业务时,调用的顺序应当是View-Controller-Model。
Model
Model,即模型,是指数据模型。在Model里处理的事务包括数据的结构、存取、管理等,与数据库等的交互应当只在这个部分中出现。
Controller
Controller,即控制器,是指控制Model的控制器,也就是业务逻辑。在Controller里处理的事务包括业务的处理,处理用户的操作请求,使用、操作数据模型完成操作或进行响应。
View
View,即视图,是指展示给用户的部分。用户通过View与Controller交互。需要注意的是,View是广义的视图,它的形式不局限于HTML或应用GUI等。例如,在下面的用户系统实例中,View仅仅是将Handler绑定到Router上这个步骤。
实例:简单的用户系统
在这个实例中,需要实现一个支持用户注册、登录、使用JWT Token获得API权限的简单用户系统,使用JSON请求和响应,使用MongoDB作为数据库。
Model
用户的数据包括用户名和加密后的密码,在这里用一个struct管理。
在这里实现的函数有:
init()
:初始化Model。创建到MongoDB的session。IsUserExists(name string)
:检查用户是否存在。GetUserByName(name string)
:获取用户。这里连接到MongoDB进行查询。AddUser(user User)
:添加用户。这里连接到MongoDB进行添加。
Controller
控制器实现了一个Handler函数BindAccount(context *gin.Context)
,在这个函数里进行两个业务操作的处理:
- 注册:调用
model.AddUser
函数。 - 登录:首先获取指定用户信息,比对密码。如果登陆成功,则生成一个JWT Token并响应给客户端。
View
将Controller实现的Handler函数绑定到Router上。
Middleware
除了注册登录接口之外还实现了一个API接口,用于验证API权限。验证权限使用了JWT Middleware。
在这里实现了一个函数ValidateJWT(context *gin.Context)
用于验证客户端发来的JWT Token是否有效。如果无效,则在进入Handler之前就响应http.StatusUnauthorized
。