V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
TIGERB
V2EX  ›  程序员

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

  •  
  •   TIGERB ·
    TIGERB · 2017-10-31 11:59:50 +08:00 · 3948 次点击
    这是一个创建于 2340 天前的主题,其中的信息可能已经有所发展或是发生改变。

    曾今

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

    • 初期:所有代码一股脑控制器 controller
      • 曾今只是简单的理解 MVC
    • 中期:业务代码抽象一部分到模型层 model
      • 开始觉得 model 层是否该做点什么了
    • 后期:业务代码控制器,模型层只写 db 的 curd 方法
      • 复杂的业务代码使 c ontroller 过于的庞大和难以维护

    当下

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

    更 合理的分层

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

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

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

    组件化代码

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

    我选择了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": "[email protected]"
            }
        ],
        "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...
    • 业务代码到逻辑层(也不一定)
    • 模型层只写 db 的 curd 方法
      • 不可撼动的原则

    结语

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

    THX~

    12 条回复    2017-11-01 09:53:48 +08:00
    yimaneilicj
        1
    yimaneilicj  
       2017-10-31 14:29:11 +08:00
    学习
    vescape920
        2
    vescape920  
       2017-10-31 16:34:06 +08:00
    感觉应该写一下具体的转变过程 怎么发生这样转变的想法 中间那段组件化我觉得不必要贴代码 这不是教程贴
    generation
        3
    generation  
       2017-10-31 18:39:00 +08:00
    composer 只要本地 git 仓库就可以了
    TIGERB
        4
    TIGERB  
    OP
       2017-10-31 19:00:04 +08:00
    @vescape920 说的对,没毛病~
    TIGERB
        5
    TIGERB  
    OP
       2017-10-31 19:00:21 +08:00
    @yimaneilicj 互相学习~
    cnwtex
        6
    cnwtex  
       2017-10-31 19:03:25 +08:00
    一句话总结:"以前我用 ThinkPHP, 现在学会了 Lavarel"
    crystom
        7
    crystom  
       2017-10-31 19:11:31 +08:00
    @cnwtex 不太相同,laravel 的 active record 不强制,但是可以说有意让开发者把逻辑层代码写到 model 类里
    carlclone
        8
    carlclone  
       2017-10-31 19:14:41 +08:00 via Android
    @cnwtex 握手,agree
    Mine
        9
    Mine  
       2017-10-31 19:14:58 +08:00
    @cnwtex #6 这话没毛病。
    cxbig
        10
    cxbig  
       2017-10-31 19:53:24 +08:00
    差不多。方向没有问题。
    HYSS
        11
    HYSS  
       2017-10-31 19:58:41 +08:00
    @cnwtex 个人还是看好 SF Laravel 太随意了 缺乏约束
    ylsc633
        12
    ylsc633  
       2017-11-01 09:53:48 +08:00
    @cnwtex 握手,没毛病

    记得有个文章说建议 中小型项目,加入 repostiroy 和 service 层.. 然后通过依赖注入,灵活调用...

    好像大约就是这个.. http://laravelacademy.org/post/3063.html
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1480 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 72ms · UTC 23:51 · PVG 07:51 · LAX 16:51 · JFK 19:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.