共计 1719 个字符,预计需要花费 5 分钟才能阅读完成。
公司项目可能需要对架构进行重建,老大给了我一个视频让我学习里面的思想,看完后觉得收获很大,主讲人对 laravel 项目各个层次有很清晰的理解,力求做到职责单一分明,提高可维护性。下面是我看完视频对其内容的大概整理,以及一些自己的见解,有错误的请指出。视频:https://www.youtube.com/watch… (有墙各位懂的)
Laravel 简单架构:
简单的小项目可能会把数据库查询,业务逻辑,数据传给 View 几乎所有操作都放在 Controller,如何项目后期需求变大,最后 Controller 会变得很臃肿,难懂,不易维护(同样,有些会把所有增删改查,功能类写在 Model,Controller 再从 Model 一个个的拿,导致 Model 很乱,Model 有关联表的时候可能会引起一些不必要的数据库查询)
我自己的理解:用美宜佳卖商品给客人来理解,主要 Controller 是某个加盟商美宜佳门店,View 是客人,Model 是商品制造工厂(理解有些粗糙)
Repository(商品仓库):
跟 Eloquent/DB 操作相关的,例如增删改查,直接和数据库打交道的基础操作抽出来放在 Repository 中,repository 中文是仓库,我的理解就是我们要从 Model 拿数据,先放在仓库 repository 中,统一由仓库管理分配,发挥仓库的职责
Service(总部服务平台):
商业逻辑,不是简单的查询数据,而是特定的任务,例如判断用户是否是会员,设置用户权限等等,这些操作建议放在 Service,之后 Controller 再调用它
个人理解:所以在 Controller 和 Model/Eloquent 中间垫两层,如果 Repository 理解为商品仓库的话,我的理解 Service 是类似总部内部的服务平台,加盟商 Controller 需要拿商品给客人 View,不能直接去食品工厂 Model 拿,先通过仓库 repository,然后总部服务平台 Service 进行打包啊,整理啊,发车啊(各种任务),最后再给到加盟商 Controller 手里
Presenter(充值业务):
一些比较固定,可以单独调用的,可以用 Presenter 抽出来,不需要让 Model 去做,下次修改也单独修改 Presenter 就行了,例如时间戳转成 Y -m-d H:i:s 格式,可以单独用 Presenter 处理后用 @inject 插入到前端模板,而不是把转化过程写在模板上面
个人理解:所以在 Controller 和 View 中间可以加一层 Presenter,我的理解有点类似:美宜佳商户 (Controller) 可以给客人 (View) 充公交卡,这种小事不需要劳费工厂(Model)
Transformer(快餐小吃人工筛选):
转换器,例如在仓库 repository 中有一个获取所有用户信息的查询操作:$this->user->all(); 但有些地方我们不需要用到那么多个字段,我只想有 name 和 email 字段,难道我要去改 all()里面的参数,变成 $this->user->all([‘name’,’email’])? 这样另外的地方又要全部字段,这不就冲突了?这时候 Transformer 就有用了,其实原理是对 $this->user->all()获得的数据进行筛选后再输出,加了个筛选器。
之后要修改结果字段就直接在 transform 修改即可,当然还可以额外添加需要的字段:array_set()
个人理解:这一块我的理解就是有些客人需要点一些快餐,例如美宜佳里面的车仔面呀,烤肠呀,在卖出商品的时候需要根据客人的需求对小吃进行筛选再卖出去,不可能客人指点要一个烤肠,你把店里全部小吃拿给他,让他自个去筛选,中间卖出去的时候需要 Transformer 进行筛选再给出商品
Formatter(包装):
主要用于保持 API 返回格式的一致(使用方法和 transform 类似):
个人理解:Formatter 这一块我的理解就是商品包装,客人买东西,买小吃,你需要对商品先进行包装,当然这个包装肯定需要保持一致
以上便是我再看完视频后对其进行总结整理,当然理论的说的容易,实际操作起来还有很多未知的问题,还是需要后面继续研究学习。