php项目目录的合理划分和Pipeline 组件的使用场景

php项目目录的合理划分和Pipeline 组件的使用场景

这是一篇迟到的文章,很早之前就一直想写了,可是经验不足有些地方理解的不透侧,当然,现在这篇文章可能也是浅尝辄止,希望不要喷我

开篇

首先,可以先导读一下如下这篇文章,有助于提升一下代码质量

Laravel 的十八个最佳实践

单一职责原则

通俗点介绍则是,一个功能为一个功能所做事情。
例如,我们需要获取用户信息,那简而言之,编写的 getUserInfo 则只用它来做一件东西。
当然,这只是一个方法,如果一个类呢,我们需要怎么来定义

如今大家遵循的大多数是 mvc 规范,现在的开发流程下,大概v,也就是视图层早已经消失殆尽

mc的关系如何处理呢,我建议大概是如下几种

-app
--Model  // 模型层
--Controller // 控制器层
--Traits 
--Stores // 处理类
--Tools // 工具类
--Routers // 扩展路由

模型和控制器就不需要多说了

  • Traits

    这个名词的解释,Trait 就不多书了,可见官方手册 : https://www.php.net/manual/zh/language.oop5.traits.php

    这里主要存放一些复用的公共函数方法,例如获取器,验证器等等,

  • Stores

用来存放模型或者控制器不方便写的一些代码,例如返回一个商品信息,需要针对商品清单从其他数据库或则数据表进行补全完整的信息
例如,购买人次,成交额等等,这个时候,这些东西既不适合交给控制器也不适合交给模型层

  • Tools

工具类,这里存放一些工具方法,例如处理某个数据集的公用或者某个组件功能需要使用的方法
常见的有响应方法,打日志的方法等等

  • Routers

路由扩展文件,这个文件的意义就在于,当系统或者功能庞大起来之后,路由将会变得非常不好管理,基本上在后台管理中,一个功能可能就产生5个左右路由

这个时候就需要其将路由文件拆分开来

以上的操作,当然不能一概而论,应当适当的针对业务场景进行处理,例如简单的一个后台,管理用户的功能就无需如此繁杂。当功能越来越多而不好管理的时候才能适当的发挥它的最大作用

重要篇

Pipeline 组件 是什么

参考文章:
【单篇】Laravel Pipeline 组件的实现原理

这是一个非常有趣的功能,大家应该或多或少的使用过中间件,是不是从来没有过去了解中间件呢

其实,中间件背后的逻辑及其实现也就是 Pipeline 的简化版

中文寓意是通道的意思

使用场景

上代码:

php项目目录的合理划分和Pipeline 组件的使用场景_第1张图片
php项目目录的合理划分和Pipeline 组件的使用场景_第2张图片
php项目目录的合理划分和Pipeline 组件的使用场景_第3张图片

如上,我们发现,第一张图我们代码非常非常少,最后一张图,返回的数据字段非常非常多,而查询语句也并没有查询多少东西

使用场景大概如下

有一批商品信息,我们只知道他的商户id和商品id (product表)
由此,我们需要给前端返回
(订单成交额 order表)
(分类信息 tag表)
(成交用户属性信息 user表)
(优惠信息 coupone表)

这个时候,按照以往的逻辑,我们有几种解决方案

  • foreach

  • foreach + 类处理

大概第二种方法用的人会最多,循环商品信息,当if需要成交额当时候就去成交额的表中查询,然后给补齐上

第一种方法就忽略吧,都是写在一个方法里面来foreach, 极度不推荐

这个时候就 Pipeline 它上场了,通过传导数据给它,在 Pipelinedispatcher中添加类
例如补齐订单成交额,则可以添加 Order::Class 等等

最大的好处,既是,将功能与功能之间耦合开来,从而即便后续我们需要针对订单成交额的代码逻辑进行修复,也不需要去修改设计到这一整块逻辑的代码

好处

  • 可读性强

  • 符合单一职责原则

  • 耦合度低

php学习交流群 : 735713840

你可能感兴趣的:(php)