iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 5
3

在用 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 model

實例:

藉由 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 的優缺點眾說紛紜,以下有一部份是個人淺見,若有誤或者覺得不合理之處,歡迎批評指教,在下會虛心接受並檢討

優點:

  • 程式的分工更加明確
  • 提高程式的可擴充性
  • 每個 Model 可以共用好幾個 view
  • 易於維護
  • 益於團隊開發 ( 大型專案 )

缺點:

  • 缺乏彈性 ( 並非指 MVC 本身,而是以框架而言 ),視框架的複雜程度而定
  • 需要花時間習慣框架的語法
  • 不適合用在小型專案 ( 上述的 Hello world 範例就是一個簡單例子 )
  • 需管理的檔案可能隨著框架的規模而變得較多,除了 MVC 之外,可能還有一些如:router、middleware、policy、provider、...等

參考資料:

  1. MVC 架構:
    (1)https://zh.wikipedia.org/wiki/MVC
    (2)https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

上一篇
Day 04 : 環境架設 part III -- Composer & Laravel
下一篇
Day 06 : RESTful API 開發
系列文
從零開始的Laravel RESTful api30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

1
Louis
iT邦新手 5 級 ‧ 2019-09-21 17:47:38

好奇為什麼會說 MVC 導致缺乏彈性,

網頁很適合用 MVC,其他不同類型的產品也會有其他適合的架構,
另外可擴充性與彈性我認為是一體的

我這邊可能要修改一下,彈性的部分應該不是就MVC本身而言,可能是根據框架本身,像是要做到 Model binding 的客製化,如: Laravel v.s. Flask,前者會比後者複雜一些,還會需要動用到其他檔案才能夠修正

0
火爆浪子
iT邦研究生 1 級 ‧ 2019-10-12 11:42:00

每個人(框架)都自己寫自己的
導致必須要習慣他的規則

我要留言

立即登入留言