在用 Laravel 實作 RESTful API 之前,稍微來介紹一下 MVC 架構,而 Laravel 就是典型符合 MVC 架構模式的框架。
MVC 是一種非常普遍的架構模式,而 MVC 代表著以下意義:
M : Model
V : View
C : Controller
Model
負責對資料部份做處理,舉凡增刪改查等,Model 會直接跟資料做溝通,而且其作業不會受到 View 或 Controller 的影響,意即 Model 不會去管資料怎麼被呈現或者如何被操作,只在乎資料的邏輯如何被設計。而 Model 不僅僅侷限於資料庫,也可能是指一些簡單的資料結構,如:變數、陣列...等。
View
管理資料的呈現方式,如:圖表、表格、圓餅圖...等,不過 View 所呈現的畫面不一定會與資料直接相關,也有可能在網頁當中只是一個簡單的 Component ( 如:header、navbar ...等 ),不會隨著 Model 的資料變化而改變。
Controller
作為不同層面之間的溝通橋樑,也是程式邏輯的核心,例如:透過 Controller 接收使用者輸入的資料,然後 Controller 將這些 input 傳給 Model 做處理,Model 處理完之後就會傳遞給 View 作畫面的呈現,又或者 Controller 也會直接介入 View 的邏輯。
以下是 MVC 架構常見的邏輯圖之ㄧ:
藉由 MVC 架構將程式邏輯分開來,避免資料處理、前端介面,與程式邏輯混在一起的情形,舉一個非常簡單的例子
<?php
// Model 存放資料
function Model(){
return "Hello world";
}
// View 輸出結果
function View($M){
echo $M;
}
// Controller 為 Model 和 View 之間的溝通橋樑
function Controller(){
View(Model());
}
Controller();
// Output: Hello world
也許到這裡為止會覺得這麼做好像太多此一舉,那是因為這支程式非常的短小,然而假如遇到規模較大的程式時,若沒有將程式邏輯分開來,可能就必須從茫茫的程式碼大海中找尋自己想要修改的地方,造成時間的浪費。
MVC 的優缺點眾說紛紜,以下有一部份是個人淺見,若有誤或者覺得不合理之處,歡迎批評指教,在下會虛心接受並檢討
優點:
缺點:
參考資料:
好奇為什麼會說 MVC 導致缺乏彈性,
網頁很適合用 MVC,其他不同類型的產品也會有其他適合的架構,
另外可擴充性與彈性我認為是一體的
我這邊可能要修改一下,彈性的部分應該不是就MVC本身而言,可能是根據框架本身,像是要做到 Model binding 的客製化,如: Laravel v.s. Flask,前者會比後者複雜一些,還會需要動用到其他檔案才能夠修正