曾今

谁都有过迷茫期,下面是我开始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

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

  1. 阿里高级技术专家方法论:如何写复杂业务代码?

    阿里妹导读:张建飞是阿里巴巴高级技术专家,一直在致力于应用架构和代码复杂度的治理.最近,他在看零售通商品域的代码.面对零售通如此复杂的业务场景,如何在架构和代码层面进行应对,是一个新课题.结合实际的业 ...

  2. 资深技术专家推荐:如何写复杂业务代码-阿里实践

    一个复杂业务的处理过程 业务背景 简单的介绍下业务背景,零售通是给线下小店供货的B2B模式,我们希望通过数字化重构传统供应链渠道,提升供应链效率,为新零售助力.阿里在中间是一个平台角色,提供的是Bsb ...

  3. 写代码犹如写文章: “大师级程序员把系统当故事来讲,而不是当做程序来写” | 如何架构设计复杂业务系统? 如何写复杂业务代码?

    写代码犹如写文章: "大师级程序员把系统当故事来讲,而不是当做程序来写" | 如何架构设计复杂业务系统? 如何写复杂业务代码? Kotlin 开发者社区 "大师级程序员把 ...

  4. 要写好业务代码,也没这么简单!

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:https://blog.csdn.net/new_com/article/details/108399421 为什么要写好业 ...

  5. 程序员新手写实际业务代码思维混乱的一些建议

    很多新手系统全套学完就业班之后,其实能力还是不错的,对常用的技术栈也都会理解,也能看得懂别人的代码.模块.架构等,但是我发现有些新手一遇到业务就非常的茫然,好像一下子就不知道怎么去写了 1.对业务的理 ...

  6. tensorflow-读写数据最佳代码组合方式

    最佳组合代码模式为: # Create the graph, etc. init_op = tf.global_variables_initializer()# Create a session fo ...

  7. 复杂业务代码要怎么写

    了解我的人都知道,我一直在致力于应用架构和代码复杂度的治理. 这两天在看零售通商品域的代码.面对零售通如此复杂的业务场景,如何在架构和代码层面进行应对,是一个新课题.针对该命题,我进行了比较细致的思考 ...

  8. 如何写出一手好的业务代码?

    以下文章来源方志朋的博客,回复"666"获面试宝典 这里举一个非常简单的例子,以案例的业务实现来分析如何写好业务代码. ★ 本案例只是简单的模拟,可能与真实的情况有出入,这里只是为 ...

  9. 你只写了两行代码,为什么要花两天时间?

    原文 | https://www.mrlacey.com 作者 | Matt Lacey 我花了两天时间,写了两行代码. 对于真正的程序员来看,这可能是一个合理的事情,但背后不理解程序员的人,往往会做 ...

最新文章

  1. 截取指定网站Html编码
  2. 【Linux】一步一步学Linux——alias命令(205)
  3. Miller-Rabin素数测试
  4. 美国明确警告德国,3G退网5G手机不需要换号,抽烟酗酒学生不能认定为家庭经济困难,大学食堂凭运动步数打折,这就是今天的大新闻。...
  5. 用计算机如何修改wif密码,wifi修改密码,教您电脑怎么修改wifi密码
  6. 华为鸿蒙系统是物联网,华为鸿蒙系统官宣!谷歌工程师直接懵了,硅谷感慨:中国人太厉害...
  7. [翻译] TGLStackedViewController
  8. 2021-07-20 计算两个日期间的工作日天数VBA函数
  9. 可调稳压电源lm317实验报告_LM317可调直流稳压电源DIY,非常实用!
  10. 用python做youtube自动化下载器 代码
  11. 【交互设计】手机上的跳转操作
  12. 港科夜闻|香港科技大学(HKUST)及香港科大智能建造实验室(HKUST BIM Lab)荣获CIC建造数码化大奖组织类最高奖项...
  13. 最小错误率的贝叶斯决策和最大似然比判别规则
  14. 人工智能(AI)在未来的发展趋势和应用场景
  15. AppScan--图解web扫描工具IBM Security AppScan Standard
  16. Java API版权第一大案,索赔百亿美元,打了10年终于有结果了!
  17. mysql数据库表中插入中文字段时报错 ‘\xCD\xF5\xBB\xAA‘
  18. 微信开发(三)创建菜单
  19. LeetCode 873. 最长的斐波那契子序列的长度**(double,need triple)
  20. Base64与图片之间互相转换

热门文章

  1. swift使用mysql教程,Swift学习教程之SQLite的基础使用
  2. mysql导出数据意义_11、mysql导出数据
  3. mysql数据库事务有几种特性_面试官:你能说说事务的几个特性是啥?有哪几种隔离级别?...
  4. priority_queuey用法
  5. java integer reverse_Leetcode7 Reverse Integer Java实现及分析
  6. 【CSDN】-官方插件推荐懒人必备神器
  7. python上传文件到onedrive_基于Python的onedrive文件本地化浏览系统–PyOne
  8. Java 将byte转换kb_【Java】把字节数B转化为KB、MB、GB的方法
  9. qq linux版本下载官网下载,腾讯QQ For Linux
  10. 用户可以改变计算机功能键吗,电脑键盘快捷键怎么更改