无论多么先进的框架,mvc思想都是值得借鉴的, mvc是模型(model)-视图(view)-控制器(controller)的缩写,他是一种软件设计典范,他用业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,这样做有巨大的好处,他在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。本章节重点阐述controller层.
控制器文件通常放在controller目录下,控制器struct名和文件名保持大小写一致,并采用驼峰命名(首字母大写)。
一个典型的控制器类定义如下:
//PageController.gopackage controllerimport ( "restgo/restgo" "github.com/gin-gonic/gin" "net/http" "fmt")type PageController struct { restgo.Controller}//前置操作func (ctrl *PageController)before() gin.HandlerFunc { return func(ctx *gin.Context) { uri := ctx.Request.RequestURI fmt.Print(uri) if 1==1{ ctx.Next() } return }}func (ctrl *PageController)Router(router *gin.Engine){ router.GET("/",ctrl.showIndex) r := router.Group("page").Use(ctrl.before()) r.POST("create",ctrl.create) r.POST("update",ctrl.update) r.POST("query",ctrl.query) r.POST("delete",ctrl.delete) r.POST("findOne",ctrl.findOne)}func (ctrl * PageController) create(ctx *gin.Context){ ctrl.Data = []int{1,2,3} ctrl.AjaxData(ctx)}func (ctrl * PageController) showIndex(ctx *gin.Context){ ctx.HTML(http.StatusOK,"panel/index.html","")}func (ctrl *PageController)delete(ctx *gin.Context){}func (ctrl *PageController)update(ctx *gin.Context){}func (ctrl *PageController)query(ctx *gin.Context){}func (ctrl *PageController)findOne(ctx *gin.Context){}
控制器文件分为四部分
l struct定义部分,一般我们让控制器和restgo.Controller拥有同样的方法即可。restgo.Controller没有做很重的封装,只实现简单的数据响应接口。大家可以自行封装。
l 前置操作before部分,这一部分主要实现前置操作,当一个控制器里面的方法被访问时,需要进行特别的一些数据处理,比如鉴权,或者参数校验,可以在这个方法里面进行操作,前置操作逻辑不宜太复杂。
l 路由控制函数router,这个函数是必须实现的方法,我们需要在该函数中实现路由配置和映射
业务函数实现,主要通过函数实现,一个控制器通常实现fineOne/query/create/update方法。
本文源代码源代码获取地址 https://github.com/winlion/restgo
10.2 天天任务清单小程序
https://github.com/winlion/dailytask
10.3 工业大数据采集
10.4 restgo cms
10.5 restgo 千人大群
作者简介:胡文林,持续创业者,长期从事技术开源工作。微信号jiepool-winlion
