摘要:前言在說架構之前,先說說框架吧。在架構中就是這個轉接頭。當一個新框架誕生后,關注點從學習這個框架,慢慢變成了這個框架是如何設計的,解決什么樣的問題。前幾年使用過各種框架,小到,大到。
前言
在說 MVC 架構之前,先說說PHP框架吧。很多很多學完PHP語言的人,面對的就是PHP各種各樣的框架。什么TP啊、Yii啊、CI啊,還有很流行的laravel啊等等。
他們的大部分都會說自己是基于 MVC 的架構,接著你得試著去理解 MVC 的邏輯,并嘗試著用這樣的邏輯去構建一個網站,然后會說 MVC 真香~
面試很多 PHP 的面試中,可能會問關于 MVC 的問題,比如 MVC 到底是什么意思,怎樣理解這種架構。然而很多人的理解是 model 是模型,他對應著數據庫中的表結構;view 對應著頁面,用于展示;controller 主要用來寫各種邏輯,關聯數據和頁面的顯示。
以上回答基本上沒有問題,但一個網站的結構真的有那么簡單么?顯然不是
設計在說之前,首先讓我們了解一下設計模式的一種:中介者模式。一個形象的理解就是:港行插頭和國行插頭的轉接頭。
在 MVC 架構中 controller 就是這個轉接頭。它只負責把 model 中的數據轉接給 view,對于訪問者來說,他們是看不到 model 中保存的真實數據的。從另外一個角度來說,這種中介者模式可以很好的將兩層數據進行友好的通信。
爬坑這種模式真的那么好么?隨著業務邏輯的越來越復雜,會發現 controller 中的代碼越來越多,甚至自己都不愿去調整和優化冗余代碼。
但從宏觀上來說,網站無非是請求多一些,表單多一些,頁面多一些啊,其他也沒什么了,為什么會這樣呢?
沒錯,就是因為這樣或那樣的東西比較多,導致 controller 中每個方法都很長,那么能想到的解決方法就是拆分。
如果用過 yii 框架,那么你會知道最簡單的辦法是加一個請求form層,代碼如下:
class AuthController { public function login() { $FLogin = new loginForm(); $FLogin->save(); } } // 一般在獨立的文件夾中 class loginForm { public function __construct() { $post = $_POST; } public function save() { } }
以上的就是解決 controller 中 form 表單的問題,這個問題基本上能緩解很多代碼問題。
發散從解決 form 層來看,其實有很多類似的問題都能解決。我們知道前端有個叫做 vue.js 的框架,它里面提到一個概念叫做 MVVM 模型。
其實在展現復雜頁面的時候,后端在對外輸出數據時,完全也可以采用這玩意進行數據輸出。至于如何建立這樣的一個模型,那就具體得看業務邏輯了。
這里簡單拿用戶中心舉個例子,因為往往這里不僅僅需要一個表的數據:
class AuthController { public function userCenterAction() { return new userVM(); } } class userVM { public $user; public $orders; public $other; public function __construct() { $this->user = $this->getUser(); $this->orders = $this->getOrders(); $this->handle(); } private function getUser() { return NULL; } private function getOrders() { return NULL; } private function handle() { } }
以上代碼中,有個 VM 層,可以將相關獲取數據的代碼放在各自的方法中,然后在 handle 方法中自由組合。這樣在 controller 中的代碼也非常便于管理。
再想想,有沒有可以封裝的其他層呢?其實是有的,比如 request 層,還有經常被框架封裝好的 validate 層,還有 laravel 中比較流行的 Middleware 層等等。只能說系統越復雜,層越多。
每個復雜系統的背后都蘊含著高級開發工程師和架構師的設計思路。以上說那么多,不知道讀者能否理解這些東西,就拿以上代碼來說,里面就蘊含著另一種設計模式:建造者模式。
總結代碼寫多了,也就知道其中蘊含的道理了。當一個新框架誕生后,關注點從學習這個框架,慢慢變成了這個框架是如何設計的,解決什么樣的問題。哪些地方用了比較好的技術和方法,從中能收獲到什么。一些地方的設計思路是什么樣的,有么有更好的設計,為何我能想到,對方想不到呢,是不是我遺漏了什么。
前幾年使用過各種 PHP 框架,小到 CI,大到 Symfony。不用那么多框架,也體會不到這些東西。學習編程其實和英語一樣,沒什么捷徑可以走。
多寫,多想,多練......
以上
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31012.html
摘要:但是模型中數據的變化一般會通過一種刷新機制被公布。它處理事件并作出響應。事件包括用戶的行為和數據模型上的改變。三開始開發自己的框架在開始開發前,讓我們先來把項目建立好,假設我們建立的項目為,那么接下來的第一步就是把目錄結構先設置好。 現如今市面上有許多PHP框架,像 ThinkPHP、YII、Laravel,那么如何自己搭建一個PHP框架呢?這里有一篇博文寫的非常好,特意轉載過來,供朋...
摘要:的最后一個大招就是替換一些傳統的服務端語言,例如,,等,在業務層上面使用來開發服務端完全不成問題。更多的的使用細節和技巧建議關注美團博客大搜車論壇下一篇我們開啟如何結合和搭建一個開發環境和項目目錄 往期回顧 前面2期都講得是瀏覽器端的東西比較多,包括Webpack,雖然是Node處理的,但是還是瀏覽器端用的多,對于現在的前端開發來說,不懂一點服務端的東西,簡直沒辦法活,一般的招聘要求都...
摘要:本文會以引出問題為主,后面有時間的話,筆者陸續會抽些重要的知識點進行詳細的剖析與解答。敬請關注服務端思維微信公眾號,獲取最新文章。 原文地址:梁桂釗的博客博客地址:http://blog.720ui.com 這里,筆者結合自己過往的面試經驗,整理了一些核心的知識清單,幫助讀者更好地回顧與復習 Java 服務端核心技術。本文會以引出問題為主,后面有時間的話,筆者陸續會抽些重要的知識點進...
摘要:容器自動完成裝載,默認的方式是這部分重點在常用模塊的使用以及的底層實現原理。 對于那些想面試高級 Java 崗位的同學來說,除了算法屬于比較「天方夜譚」的題目外,剩下針對實際工作的題目就屬于真正的本事了,熱門技術的細節和難點成為了主要考察的內容。 這里說「天方夜譚」并不是說算法沒用,不切實際,而是想說算法平時其實很少用到,甚至面試官都對自己出的算法題一知半解。 這里總結打磨了 70 道...
閱讀 1714·2021-11-22 15:33
閱讀 2084·2021-10-08 10:04
閱讀 3542·2021-08-27 13:12
閱讀 3418·2019-08-30 13:06
閱讀 1466·2019-08-29 16:43
閱讀 1390·2019-08-29 16:40
閱讀 785·2019-08-29 16:15
閱讀 2745·2019-08-29 14:13