资讯专栏INFORMATION COLUMN

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

qqlcbb / 1238人阅读

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

曾今

谁都有过迷茫期,下面是我开始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即可复用我们的业务代码。但是有一个问题如果使用 https://packagist.org 需要把代码开源出去,和业务无关的工具类还好说,而且开源还是个好事情,但是和业务相关比较敏感的组件就有问题了,所以我们需要搭建一个私有的packagist, 私有packagist示例:http://packagist.tigerb.cn/,具体搭建步骤见文末。

总结

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

composer组件化代码,依赖开源或私有packagist

前置中间件懒加载的方式依赖注入composer require的组件

控制器暴露资源

优雅的参数校验工具类

使用try...catch...finally...

响应尽可能的符合restful思想,比如error code:400,404,500...

业务代码到逻辑层(也不一定)

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

模型层只写db的curd方法

不可撼动的原则

结语

不足还有很多,在这里只是把自己的想法分享出来,好的大家可以借鉴,不好的希望大家多多指正。

THX~

附录

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"
    }
}

扫面下方二维码关注我的技术公众号,及时为大家推送我的原创技术分享

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25985.html

相关文章

  • 回顾我 2016 -- my2016()

    摘要:距离的钟声响起,还有一个小时。由于工作缘故,此时还在加班。仔细思考,一切都是自己埋下的服务器隐患。工作不忙,给了很多空余时间,有了充分的时间来接外包单和学习,但依旧没有改变我拮据的现状。 php echo happy new year!; header(距离2017的钟声响起,还有一个小时。由于工作缘故,此时还在加班。 仔细思考,一切都是自己埋下的服务器隐患。, ...

    SimpleTriangle 评论0 收藏0
  • 程序员天花板

    摘要:年薪百万是很多程序员的目标甚至梦想。今天,就借用知乎推送给我的话题程序员如何突破职业天花板谈一谈我的心路历程,其实也代表着我个人职场观的进化过程。 年薪百万是很多程...

    legendmohe 评论0 收藏0
  • 架构

    摘要:分布式架构实践负载均衡在网站创立初期,我们一般都使用单台机器对台提供集中式服务,但是随着业务量越来越大,无论是性能上还是稳定性上都有了更大的挑战。就鹿晗宣布恋情导致微博宕机事件浅谈大型网站高可用性架构中午吃饭刷着刷着微博发现微博突然挂了。 分布式架构实践——负载均衡 在网站创立初期,我们一般都使用单台机器对台提供集中式服务,但是随着业务量越来越大,无论是性能上还是稳定性上都有了更大的挑...

    Pink 评论0 收藏0

发表评论

0条评论

qqlcbb

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<