个人github博客:zgxxx.github.io/前端
公司项目可能须要对架构进行重建,老大给了我一个视频让我学习里面的思想,看完后以为收获很大,主讲人对laravel项目各个层次有很清晰的理解,力求作到职责单一分明,提升可维护性。下面是我看完视频对其内容的大概整理,以及一些本身的看法,有错误的请指出。 视频:www.youtube.com/watch?v=pzY… (有墙各位懂的)laravel
简单的小项目可能会把数据库查询,业务逻辑,数据传给View几乎全部操做都放在Controller,如何项目后期需求变大,最后Controller会变得很臃肿,难懂,不易维护(一样,有些会把全部增删改查,功能类写在Model,Controller再从Model一个个的拿,致使Model很乱,Model有关联表的时候可能会引发一些没必要要的数据库查询)git
我本身的理解:用美宜佳卖商品给客人来理解,主要Controller是某个加盟商美宜佳门店,View是客人,Model是商品制造工厂(理解有些粗糙)github
跟Eloquent/DB操做相关的,例如增删改查,直接和数据库打交道的基础操做抽出来放在Repository中,repository中文是仓库,个人理解就是咱们要从Model拿数据,先放在仓库repository中,统一由仓库管理分配,发挥仓库的职责 数据库
商业逻辑,不是简单的查询数据,而是特定的任务,例如判断用户是不是会员,设置用户权限等等,这些操做建议放在Service,以后Controller再调用它 架构
**我的理解:**因此在Controller和Model/Eloquent中间垫两层,若是Repository理解为商品仓库的话,个人理解Service是相似总部内部的服务平台,加盟商Controller须要拿商品给客人View,不能直接去食品工厂Model拿,先经过仓库repository,而后总部服务平台Service进行打包啊,整理啊,发车啊(各类任务),最后再给到加盟商Controller手里 学习
一些比较固定,能够单独调用的,能够用Presenter抽出来,不须要让Model去作,下次修改也单独修改Presenter就好了, 例如时间戳转成Y-m-d H:i:s格式,能够单独用Presenter处理后用@inject插入到前端模板,而不是把转化过程写在模板上面 this
转换器,例如在仓库repository中有一个获取全部用户信息的查询操做:this->user->all(['name','email'])? 这样另外的地方又要所有字段,这不就冲突了?这时候Transformer就有用了,其实原理是对$this->user->all()得到的数据进行筛选后再输出,加了个筛选器。 orm
主要用于保持API返回格式的一致(使用方法和transform相似): cdn