这两年多我写PHP业务代码的方式是如何进化的

曾今

谁都有过迷茫期,下面是我开始PHP开发中,不断改变的代码组织方式。

  • 初期:所有代码一股脑控制器controller

    • 曾今只是简单的理解MVC
  • 中期:业务代码抽象一部分到模型层model

    • 开始觉得model层是否该做点什么了
  • 后期:业务代码控制器,模型层只写db的curd方法

    • 复杂的业务代码使controller过于的庞大和难以维护

当下

汲取以前的码码体验,我目前的码码方式做了如下改变:

更合理的分层

  • 控制器暴露资源
  • 业务代码到逻辑层
  • 模型层只写db的curd方法

度的把握,凡事都是灵活的,也不都是这样,认为足够简单的逻辑还是“业务代码控制器,模型层只写db的curd方法”。

依赖注入,懒加载,前置中间件

  • 依赖注入容器很重要,配上懒加载,减少代码,解耦依赖,提升性能

    • 关于容器可以参考我之前简单的实现http://easy-php.tigerb.cn/#/?...
  • 前置中间件注入我们依赖的类

    • 我实现的简单的前置中间件,示例挂载了一个gateway到控制器之前http://easy-php.tigerb.cn/#/?...

组件化代码

首先我们需要利用composer来拆分和组件化我们的代码,业务中简单的composer require即可复用我们的业务代码。但是有一个问题如果使用 http://www.xsjdy.org 需要把代码开源出去,和业务无关的工具类还好说,而且开源还是个好事情,但是和业务相关比较敏感的组件就有问题了,所以我们需要搭建一个私有的packagist, 私有packagist示例。

我选择了Satis搭建私有的packagist,安装步骤如下:

step 1:

composer create-project composer/satis:dev-master --keep-vcs && cd satis

step 2:

touch satis.json

satis.json文件的内容如下

{"name": "packaglist-tigerb","homepage": "http://packaglist.tigerb.cn","repositories": [ { "type": "vcs", "url": "http://github.com/tigerb/easy-mipush" }, { "type": "vcs", "url": "http://github.com/easy-framework/easy-router"} ], "require-all": true }

step 3:

php bin/satis build ./satis.json <你的web servser项目目录,比如我的路径/mnt/www>

step 4:

配置nginx server 配置,重启nginx即可

如何使用?

简单的配置composer.json即可,增加新的repositories地址,具体示例配置如下:

{"name": "tigerb/test","authors": [{"name": "TIGERB", "email": "tigerbcode@gmail.com" } ], "repositories":[ {"type":"composer", "url": "http://packagist.tigerb.cn"} ], "config": { "secure-http": false }, "require": { "tigerb/easy-mipush": "^0.1.0" } }

总结

目前让我接手一个项目我会从如下几个方面去组织我的php代码:

  • composer组件化代码,依赖开源或私有packagist
  • 前置中间件懒加载的方式依赖注入composer require的组件
  • 控制器暴露资源 新视觉影院

    • 优雅的参数校验工具类
    • 使用try...catch...finally...
    • 响应尽可能的符合restful思想,比如error code:400,404,500...
  • 业务代码到逻辑层(也不一定)

    • 复杂的业务代码先建模再写,建模可以组织好我们的代码并且可以运用一些设计模式,关于建模可以参考的我的文章PHPer月工作总结之观察者&装饰器模式
  • 模型层只写db的curd方法

    • 不可撼动的原则

转载于:https://www.cnblogs.com/xinshijue6080/p/7763806.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html播放切片,[Html/Css]网页切片

简介这篇文章主要介绍了[Html/Css]网页切片以及相关的经验技巧&#xff0c;文章约2269字&#xff0c;浏览量461&#xff0c;点赞数4&#xff0c;值得参考&#xff01;网页切片 前端必须掌握的技能&#xff0c;切片&#xff0c;虽然说难也不难&#xff0c;简单也确实是挺简单的&…

时间转换python_Python 日期与时间转换的方法

问题 你需要执行简单的时间转换&#xff0c;比如天到秒&#xff0c;小时到分钟等的转换。 解决方案 为了执行不同时间单位的转换和计算&#xff0c;请使用 datetime 模块。 比如&#xff0c;为了表示一个时间段&#xff0c;可以创建一个 timedelta 实例&#xff0c;就像下面这样…

设计模式学习总结(一)——设计原则与UML统一建模语言

目录 一、概要1.1、设计模式定义1.2、设计模式分类1.3、设计模式书籍二、UML统一建模语言2.1、UML分类2.2、类图2.2.1、关联2.2.2、聚合/组合2.2.3、依赖2.2.4、泛化&#xff08;继承&#xff09;三、设计原则2.1、单一职责原则&#xff08;SRP&#xff09;2.2、开闭原则&#…

计算机与生命科学专业排名,2019软科世界一流学科排名发布,54个专业TOP10牛校榜单全给你...

原标题&#xff1a;2019软科世界一流学科排名发布&#xff0c;54个专业TOP10牛校榜单全给你软科26日正式发布2019“软科世界一流学科排名”(Shanghai Rankings Global Ranking of Academic Subjects)。2019年排名覆盖54个学科&#xff0c;涉及理学、工学、生命科学、医学和社会…

python入门心得_一天入门 Python 的一些心得

1. 前言 好久没写文了。最近在搞一些好玩的技术用到了 Python 。我原以为要花些时日&#xff0c;谁知道第一天入门之后便没有再刻意地去学习它了。这里就写写其中的一些关键点吧。如果我去学一门语言不是因为它火了而是我用到它了。曾经闲着没事干的时候把 Kotlin 、Vue、React…

git 创建tag , 查看tag , 删除tag

2157 git tag  //查看tag2158 git tag test_tag c809ddbf83939a89659e51dc2a5fe183af384233    //在某个commit 上打tag2159 git tag ... 2169 git push origin test_tag    //!!!本地tag推送到线上 ... 2180 git tag -d test_tag        //本地删除tag…

太原计算机专业专科大学排名,太原【计算机学校】排名

太原【计算机学校】排名&#xff0c;资助政策1、根据国家助学金管理办法相关规定:凡被我校正式录取并注册学籍的学生在校期间均可以享受国家**费补助1900元/年,享受三年。创新科技中等专业学校排名&#xff0c; 有45个本科专业&#xff0c;16个专科专业&#xff0c; 3个专业硕士…

python print format

挺有用 //test.py 1 print %.*f %(1, 13.987) 2 print %.*f %(2, 13.987) 3 print p%8d %(123) 4 print p%-8d %(123) 5 print %d %(1) 6 print % d %2 7 print %#o %(17) 8 print %#x %(17) 9 print %#X %(29) 10 print %02d %(3) 11 print % 02d %(3) 12 print %%%d %(4) 13 …

python中正则表达式的默认匹配方式为_Python模式匹配与正则表达式

1.1 不用正则表达式来匹配文本 假设我希望在一个字符串中找到电话号码&#xff0c;电话号码的格式为三个数字&#xff0c;一个短横线&#xff0c;四个数字&#xff0c;一个短横线&#xff0c;四个数字 比如&#xff1a;131-3310-5293和132-2670-9864 def IsTruePhoneNumber(con…

计算机网络应用是学什么类型的,计算机网路中服务类型及应用

服务(service)这个极普通的术语在计算机网络中无疑是一个极重要的概念。在网络体系结构中&#xff0c;服务就是网络中各层向其相邻上层提供的一组操作&#xff0c;是相邻两层之间的界面。由于网络分层结构中的单向依赖关系&#xff0c;使得网络中相邻层之间的界面也是单向性的&…

oschina git服务, 如何生成并部署ssh key

1.如何生成ssh公钥 你可以按如下命令来生成 sshkey: ssh-keygen -t rsa -C "xxxxxxxxxx.com" # Generating public/private rsa key pair... # 三次回车即可生成 ssh key 查看你的 public key&#xff0c;并把他添加到码云&#xff08;Gitee.com&#xff09; SSH k…

需求调研报告模板_2020年工业软管行业深度市场调研及投资策略建议报告-液体化学品增加对其需求...

&#xff08;原标题&#xff1a;液体化学品市场规模增加 对工业软管需求量变大&#xff09;工业软管&#xff0c;又称为工业胶管。主要用于各行业各设备作软体连接的一种软管。相比民用软管&#xff0c;工业作业环境更复杂、更恶劣、设备对输送管的要求也更苛刻&#xff0c;因此…

计算机基础理论知识的论文,计算机基础毕业论文

计算机基础毕业论文随着科学技术的不断发展&#xff0c;计算机也开始人类在正常生活当中所应用的一个高新的技术。下面是小编整理的计算机基础毕业论文&#xff0c;欢迎来参考&#xff01;摘要&#xff1a;大学进行计算机教学能够对学生的创新能力进行培养&#xff0c;还能够使…

配置TomCat环境变量

在完成jdk的配置后进行 配置方法&#xff1a; ①安装tomcat ②我的电脑--属性--高级系统设置--环境变量 ③创建CATALINA_HOME变量 ④然后编辑 path 环境变量引入CATALINA_HOME变量值 ⑤测试&#xff0c;打开浏览器输入localhost&#xff1a;8080 环境变量写法&#xff1a;  第…

hyperledger fabric_鼎诚鬼才|超级账本入门(四):HYPERLEDGER 权限管理

权限管理权限管理机制是 hyperledger fabric 项目的一大特色。下面给出使用权限管理的一个应用案例。启动集群首先现在相关镜像。$ docker pull yeasy/hyperledger:latest $ docker tag yeasy/hyperledger:latest hyperledger/fabric-baseimage:latest $ docker pull yeasy/hyp…

用计算机表白的数字,用数字表白

用数字表白2018-09-11组句&#xff1a;83848520920910851314——怕生怕死怕我爱你&#xff0c;就爱你&#xff0c;就要你怕我一生一世 584,5682177778,12234,1798,76868,587129955,829475,5201314. —— 我发誓&#xff0c;我想陪你一起去吹吹风&#xff0c;要让爱相随&#xf…

Python基础检测:20171105

第一周的预习结束了 效果并不理想,最后的检测也是有个别同学表现还可以.最后一次检测,除了依旧不是放在一个文件里,文件也没有标注作者从而导致我没办法一一回复外,有些问题写的不好意外.基本没什么毛病,摔! 本次问题是以小故事的形式展开并串联的,并没有什么特殊的意思.本人不…

python爬音乐网站_用 Python 爬取 QQ 音乐全部歌曲

前景介绍 最近小伙伴们听歌的兴趣大涨&#xff0c;网抑云综合症已经遍布各地。 咱们再来抬高一波QQ音乐的热度吧。 土豪充绿钻 和 刷永久绿钻的除外(me) 爬它 目标&#xff1a;https://y.qq.com/portal/singer_list.html 任务&#xff1a;将A到Z的歌手以及全部页数的歌存到本地…

计算机基础职教云答案,计算机基础课程答案

【单选题】在Windows中&#xff0c;【AltTab】组合键的作用是( )【单选题】在Windows中&#xff0c;选择多个连续的文件或文件夹&#xff0c;应首先选择第一个文件或文件夹&#xff0c;然后按住( )键&#xff0c;单击最后一个文件或文件夹【单选题】在Windows 资源管理器中&…

8.String、StringBuffer、enum枚举

1.字符串相关类 1)string类代表不可变的字符系列。 2)stringBuffer,Buffer就是缓冲区&#xff0c;代表的是可变的字符系列。 这可变和不可变的是怎么理解呢&#xff1f; 如图&#xff0c;不是a的字符系列改变了&#xff0c;只是 开辟了一份新的内存&#xff0c;然后重新把a指向…