当前位置: 首页 > 后端技术 > PHP

打造Laravel优美架构,谈可维护性和灵活设计

时间:2023-03-29 14:04:38 PHP

公司项目可能需要重构架构。老板给了我一个视频,让我学习里面的思想。看完之后,感觉收获颇多。层级有非常清晰的认识,力求做到职责单一明确,提高可维护性。以下是我看完视频后对内容的总结,以及自己的一些看法,如有错误请指出。视频:https://www.youtube.com/watch...(大家懂的墙)Laravel简单架构:简单的小项目可能会将数据库查询、业务逻辑、数据传递给View。几乎所有的操作都放在Controller里面,项目后期怎么增加需求,最后Controller会变得很臃肿,难理解,难维护(同理有的会增删改查,把功能类写在Model中,Controller会从Model中一个一个的取,导致Model很乱,当Model有相关表时,可能会造成一些不必要的数据库查询)我自己的理解:使用美衣家卖产品给客户理解,主Controller是加盟商美衣家门店,View是customer,Model是商品制造工厂(理解有点粗糙)Repository(商品仓库):与Eloquent/DB操作相关,比如如增删改查,将直接与数据库打交道的基本操作抽取出来放在Repository中,中文repository就是一个仓库。理解就是我们需要从Model中获取数据,先放到仓库repository中,由仓库管理统一分发,起到仓库的作用。Service(总部服务平台):业务逻辑不是简单的查询数据,而是具体的任务,比如判断用户是否是会员,设置用户权限等,这些操作建议放在Service中,然后控制器将调用它。个人理解:所以在Controller和Model/Eloquent之间有两层。如果把Repository理解为商品仓库,我理解的Service类似于总部的内部服务平台。加盟商Controller需要将商品交给客户View,不能直接去食品工厂Model拿取。首先会经过仓库Repository,然后总部服务平台Service会打包、整理、送车(各种任务),最后交给加盟商Controller的Presenter(充值服务):有些比较固定并且可以单独调用,可以和Presenter一起提取。不需要让Model去做,下次修改时可以单独修改Presenter,例如将时间戳转成Y-m-dH:i:s格式,可以单独由Presenter处理,插入到使用@inject的前端模板,而不是在模板上编写转换过程。个人理解:所以可以在Controller和View之间加一层Presenter,我的理解有点类似:美宜家商户(Controller)可以给客户(View)充公交卡,这种小事不用劳力Factory(Model)Transformer(人工筛选快餐和零食):Transformer,例如有一个获取仓库repository中所有用户信息的查询操作:$this->user->all();但是我们有些地方不需要用那么多字段,我只想有name和email字段,是不是应该把all()里面的参数改成$this->user->all(['name','电子邮件'])?这样其他地方的所有字段都是必填的。这不是冲突吗?这时候Transformer就派上用场了。其实原理就是对$this->user->all()得到的数据进行过滤,然后输出。添加过滤器后,可以直接在transform中修改result字段。当然,可以添加额外的必填字段:array_set()个人理解:我对这块的理解是有些客户需要点一些快餐,比如美宜家的车仔面、香肠。顾客不可能要烤香肠。你可以把店里的零食都给他,让他自己筛选。中间卖的时候,需要Transformer过滤一下,再给他们。CommodityFormatter(包装):主要用于保持API返回格式的一致性(使用方法类似transform):个人理解:我对Formatter的理解就是商品包装。当客户购买东西或零食时,您需要先对商品进行包装,当然,包装必须一致。以上是我看完视频后的总结。当然理论上说起来容易,但是在实践中还有很多未知的问题,还需要我们以后继续研究和研究。附上个人简单博客:https://zgxxx.github.io/欢迎讨论