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

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

开篇

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

单一职责原则

通俗点介绍则是,一个功能为一个功能所做事情。

例如,我们需要获取用户信息,那简而言之,编写的 getUserInfo 则只用它来做一件东西。

当然,这只是一个方法,如果一个类呢,我们需要怎么来定义

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

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

-app

--Model // 模型层

--Controller // 控制器层

--Traits

--Stores // 处理类

--Tools // 工具类

--Routers // 扩展路由

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

Traits

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

Stores

用来存放模型或者控制器不方便写的一些代码,例如返回一个商品信息,需要针对商品清单从其他数据库或则数据表进行补全完整的信息

例如,购买人次,成交额等等,这个时候,这些东西既不适合交给控制器也不适合交给模型层

Tools

工具类,这里存放一些工具方法,例如处理某个数据集的公用或者某个组件功能需要使用的方法

常见的有响应方法,打日志的方法等等

Routers

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

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

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

重要篇

Pipeline 组件 是什么

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

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

中文寓意是通道的意思

使用场景

上代码:

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

使用场景大概如下

有一批商品信息,我们只知道他的商户id和商品id (product表)

由此,我们需要给前端返回

(订单成交额 order表)

(分类信息 tag表)

(成交用户属性信息 user表)

(优惠信息 coupone表)

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

foreach

foreach + 类处理

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

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

这个时候就 Pipeline 它上场了,通过传导数据给它,在 Pipeline 的dispatcher中添加类

例如补齐订单成交额,则可以添加 Order::Class 等等

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

好处

可读性强

符合单一职责原则

耦合度低

php学习交流群 : 735713840

php项目怎么分配,php项目目录的合理划分和Pipeline 组件的使用场景相关推荐

  1. pom项目install报错没有自己_SAP财务凭证报错:没有项目种类分配到科目

    一.问题描述:在财务做过账凭证时提示没有项目种类分配到科目 二.SAP凭证分割讲解:SAP凭证分割,一张原始凭证所列的支出,需要由两个以上单位共同负担时,应当由保存该原始凭证的单位,开给其他应负担支出 ...

  2. 【课题总结】OpenCV 抠图项目实战(1)目录摘要

    Python 小白的课题报告-OpenCV 抠图项目实战(1)目录摘要 本系列是 Python 小白的课题作业<基于OpenCV 的图像分割和抠图>. 需要说明的是,本系列并不能算是 Op ...

  3. 【android studio】解决android studio drawable新建项目时只有一个drawable目录的问题

    [android studio]解决android studio drawable新建项目时只有一个drawable目录的问题 参考文章: (1)[android studio]解决android s ...

  4. 没有项目种类分配到科目 1901090000/KTK

    公司新加了一个工厂KASZ , 已有的工厂没启用"物料分类账",KASZ 启用了"物料分类账", 在测试 MB1B  :  501  无订单收货时提示: 没有项 ...

  5. mysql药品库管理项目简介_MySQL数据库项目化教程简介,目录书摘

    内容简介: 本书以实际的学生竞赛项目管理系统为案例依托,从MySQL数据库的相关概念及理论知识出发,介绍系统需求分析.数据库设计与实施.数据库管理与优化等内容,最终实现学生竞赛项目管理系统的设计.开发 ...

  6. IDEA2020 创建maven项目没有src/main/java目录和webapp目录问题解决

    问题描述 在IDEA中创建maven项目时,发现没有src/main/java目录和webapp目录 问题解决 红色框里一开始是默认的maven地址,如果本身默认地址里并没有这些maven配置,会导致 ...

  7. Eclipse将项目部署tomcat的webapps目录

       Eclipse将项目部署tomcat的webapps目录 >>>>>>>>>>>>>>>>> ...

  8. Atitit 项目中的俩大孤岛问题 项目孤岛 编程语言孤岛 项目管理 目录 1. 孤岛效应 1 1.1. 功能重复建设 不同项目组,不同语言的功能重复建设 1 1.2. 人员互相支援不利,项目

    Atitit 项目中的俩大孤岛问题  项目孤岛  编程语言孤岛 项目管理 目录 1. 孤岛效应 1 1.1. 功能重复建设  不同项目组,不同语言的功能重复建设 1 1.2. 人员互相支援不利,项目组 ...

  9. idea2020.1.1maven项目打包后,项目目录中没有target

    idea的maven项目,打包后,项目目录没有显示target_中岛美雪的博客-CSDN博客 参考以上内容解决.

最新文章

  1. R 语言常用操作与函数汇总
  2. 云路由 vyatta 体验(四)web代理
  3. JAVA不可变List的实现
  4. 最简单的基于FFMPEG的图像编码器(YUV编码为JPEG)
  5. 数学建模评价类方法01——灵敏度分析
  6. 小技巧 - 如何下载微信公众号音频?(附:此方法可用于类似的Web)
  7. Layui Form 如何主动验证表单是否通过
  8. rapidminer员工离职分析_RapidMiner 9从根本上简化了分析团队的数据准备工作
  9. 不是不给你,而是你承受不住
  10. 利用discord创建一个自己的discord bot机器人
  11. attachment.php是什么,attachment是什么意思
  12. 三星Note 7停产,原来是吃了流程的亏
  13. JDK中的Hprof命令
  14. 转发器、集线器、网桥、交换机的区别
  15. 轨道交通车载设备军工电磁兼容试验-可靠性测试机构
  16. 一轻机器人_遨博轻型协作机器人6轴
  17. 中二教程_场管自激特斯拉线圈
  18. 只让火狐浏览器识别的css标识
  19. python大学公众号_推荐几个专业的技术公众号
  20. K线形态识别_下跌三连阴

热门文章

  1. java 字节码加载_java面试题jvm字节码的加载与卸载
  2. git 的 merge 与 no-ff merge 的不同之处
  3. 赶在520之前,程序员如何用Python送上最特别的“我爱你”表白
  4. 如何优雅的关闭 Spark Streaming 程序(2种思路)
  5. 【CCF】201412-1门禁系统
  6. [机器学习-原理篇]学习之线性回归、岭回归、Lasso回归
  7. pytorch —— 图像预处理模块(Transforms)
  8. ss模型复模态的物理意义及adams复模态振型求解
  9. Multi-thread--C++11中std::unique_lock的使用
  10. 设置固定高度_防排烟系统的设置,前室、楼梯间、避难层!设置要求全记住!...