PHP手寫MVC(一)—— MVC 簡介

受到兩位大佬的影響 @章亦春 @仁風,決定寫一個簡單的MVC源碼,爭取在年前寫完分享給你們。

MVC 簡介

MVC 是 Model-View-Controller 的簡稱,用一種業務邏輯、數據、頁面顯示分離的方法組織代碼,將業務邏輯彙集到一個部件裏面,與用戶交互的頁面能夠不受業務邏輯限制,可隨時更改和切換。
mvc life cycle
上圖是一個 MVC 框架處理請求的流程,Controller 接收請求,並組織轉發請求到 Model,Model 實現邏輯代碼和數據交互,返回結果給 Controller,Controller 執行頁面處理並返回結果給請求。php

MVC 應該包含什麼?

沒有固定答案,但如下內容是我預計要實現的:linux

  • 入口文件(如 index.php)用於接受請求,註冊應用,定義常量等
  • 自動加載
  • 註冊插件
  • 自定義路由 分發請求
  • 依賴注入 容器
  • 配置服務
  • 錯誤 日誌服務
  • ORM
  • 視圖引擎
  • CLI 命令行工具
  • 測試工具
  • 認證驗證服務
  • ...

框架簡介

我把要實現的框架命名爲 origin,但願各位帶着初心出發 之後牛逼了別忘了 originlaravel

架構設計

框架的大體結構,如圖所示架構

關鍵模塊

架構圖的最頂部有三個模塊,分別是mvc

  • 分發器
  • 容器
  • 盒子

分發器的做用是,進行全局管理,包括全部類的實例化操做,公共方法的定義等,容器和盒子是分發器的子類,它們的區別在於,容器中的實例能夠重複利用,盒子中的實例每次會從新建立。 app

容器就是 laravel 每天吹的容器框架

準備工做

咱們在工做目錄下建立一個名爲 origin 的文件夾做爲框架名稱。工具

$ mkdir origin

origin 中須要建立一系列目錄用來存放應用代碼和框架自己的代碼測試

$ cd origin
$ mkdir app core public

$ cd app
$ mkdir controllers models views conf

建立好後目錄結構爲(使用 tree 命令)spa

origin
  - app
    - conf
    - controllers
    - models
    - views
  - public
  - core

其中文件夾 app 用來存放全部與應用相關的代碼,core 用來存放框架自己的代碼,public 存放入口文件(如 index.php)和公共資源(如 JS,CSS)。

總結

本結主要介紹了 MVC 框架的概念和工做流程,以及一些開發規範和命名空間。建立了一個 origin 的目錄做爲框架名稱,並在該目錄下建立了一些目錄用於框架代碼和應用代碼的隔離。

下期見

相關文章
相關標籤/搜索