MVC设计模式

 

 

控制器概述

到目前为止,我们定义的所有路由都是基于闭包函数实现的,前面已经提到过,随着应用体量的增长,不可能将所有路由都定义在单个文件中,且对于复杂的业务逻辑,闭包函数也不足以支撑,所以和其他 Web 应用框架一样,我们还可以通过控制器来定义路由。

说到这里,我们就不得不提一下 MVC 设计模式,这个模式最早在 Ruby On Rails 中引入,然后被基本上所有的 Web 框架所借鉴和遵循,Laravel 也不例外。

在 MVC 模式中,M 代表模型(Model),V 代表视图(View),C 代表控制器(Controller),

控制器负责组织路由和业务逻辑(当然,对于更加复杂的业务逻辑还会引入 Service 层),

模型类负责底层数据存取与处理,

而视图层负责数据渲染与页面交互

 

。对于一些 CRUD 操作(数据库增删改查操作的简写)来说,常见的业务逻辑也就是从模型类获取数据并将其渲染到页面,或者从页面获取用户提交数据并将其存储到模型类:

MVC模式

 

将所有业务逻辑一股脑放到控制器听起来挺不错,但是控制器更适合承担的角色其实是负责对 HTTP 请求进行路由

因为还有很多其他访问应用的方式,比如 Artisan 命令、队列、调度任务等等,控制器并非唯一入口,所以不适合也不应该将所有业务逻辑封装于此,过度依赖控制器会对以后应用的扩展带来麻烦。

所以,你应该具备这样的意识:控制器的主要职责就是获取 HTTP 请求,进行一些简单处理(如验证)后将其传递给真正处理业务逻辑的职能部门,如 Service

注:当然,如果是非常简单的应用,比如只是简单的数据库增删改查或数据渲染,放到控制器里面也无妨,但是如果后续需要调用控制器方法才能完成某个功能,那么是时候将这个控制器方法里的业务逻辑拆分到 Service 里面了。

 

posted @ 2019-06-13 21:14  aocn  阅读(410)  评论(0)    收藏  举报