這兩年多我寫PHP業務代碼的方式是如何進化的

曾今

誰都有過迷茫期,下面是我開始PHP開發中,不斷改變的代碼組織方式。php

  • 初期:全部代碼一股腦控制器controller
    • 曾今只是簡單的理解MVC
  • 中期:業務代碼抽象一部分到模型層model
    • 開始以爲model層是否該作點什麼了
  • 後期:業務代碼控制器,模型層只寫db的curd方法
    • 複雜的業務代碼使controller過於的龐大和難以維護

當下

汲取之前的碼碼體驗,我目前的碼碼方式作了以下改變:nginx

更合理的分層

  • 控制器暴露資源
  • 業務代碼到邏輯層
  • 模型層只寫db的curd方法

度的把握,凡事都是靈活的,也不都是這樣,認爲足夠簡單的邏輯仍是「業務代碼控制器,模型層只寫db的curd方法」。git

依賴注入,懶加載,前置中間件

  • 依賴注入容器很重要,配上懶加載,減小代碼,解耦依賴,提高性能
  • 前置中間件注入咱們依賴的類

組件化代碼

首先咱們須要利用composer來拆分和組件化咱們的代碼,業務中簡單的composer require便可複用咱們的業務代碼。可是有一個問題若是使用 packagist.org 須要把代碼開源出去,和業務無關的工具類還好說,並且開源仍是個好事情,可是和業務相關比較敏感的組件就有問題了,因此咱們須要搭建一個私有的packagist, 私有packagist示例:packagist.tigerb.cn/,具體搭建步驟見文末。github

總結

目前讓我接手一個項目我會從以下幾個方面去組織個人php代碼:web

  • composer組件化代碼,依賴開源或私有packagist
  • 前置中間件懶加載的方式依賴注入composer require的組件
  • 控制器暴露資源
    • 優雅的參數校驗工具類
    • 使用try...catch...finally...
    • 響應儘量的符合restful思想,好比error code:400,404,500...
  • 業務代碼到邏輯層(也不必定)
  • 模型層只寫db的curd方法
    • 不可撼動的原則

結語

不足還有不少,在這裏只是把本身的想法分享出來,好的你們能夠借鑑,很差的但願你們多多指正。json

THX~設計模式

附錄

Satis搭建私有的packagist過程,安裝步驟以下:bash

step 1:restful

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

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"
    }
}
複製代碼

相關文章
相關標籤/搜索