最近開始進行一些面試,真的深刻感受到這個問題的重要,算是寫 rails 根本的概念了吧,應該有接觸後端框架或是網業開發必備的設計概念,今天也被面試官問到,如果要跟沒程式經驗的小白解釋的話要怎麼說明,所以就打算用個淺顯易懂的方式來說明觀念吧!!

白話文來解釋 MVC

最近大家好像都開始蠢蠢動,因為防疫限制的鬆綁所以紛紛開始出國,就拿我們辦個護照的例子來說明好啦。
先想像一下,今天你走進去外交部領事事務局,因為初來乍到所以不熟悉這邊的行政單位在哪,就找了一樓服務台的阿姨問了一下辦理護照需要去哪邊?

阿姨告訴你說請到 3 樓申辦櫃台去進行辦理,於是你走到 3 樓,找到櫃檯跟他說你要辦理護照,他請你填寫一些基本資料,並且附上對應的照片等等,然後就幫你把你的資料送到收件的地方並且核對你的資料,後續根據你的相關紀錄,確認都有符合辦理的條件後,就把製作好的護照交給你手上。

其實剛剛很生活的例子就完全解釋了我們整個 mvc 的運作架構,接下來一一說明一下吧。

白話之後也對應網頁運作

上邊特別標註的一些名詞其實都是對應我們 MVC 的一些概念喔,像是服務台阿姨其實扮演著 Route 的角色,就是表示當使用者點下或輸入特定網址,Route 就告訴你的瀏覽器要把你導向甚麼位置,這個位置是 3 樓,也就是 Controller 的部分,Controller 上面會帶有很多 Action,每個都是一種特殊的方法,可以表示不同行政的櫃檯 (有辦護照、申請移民、申請居留等等),把你的資料透過 Action 送到收件處,就是 Model 去進行比對,幫你跟資料庫進行溝通,透過 SQL 語法和資料庫溝通,資料庫確定你的身分,也比對過後沒問題,就找到對應的資料放到護照上交還給辦理櫃檯,然後再交到你手上,護照就是表示需要呈現的資料,也就是把資料放到瀏覽器上面呈現給你看到,等於就是透過 Controller 的 Action 交給 View 去呈現,View 可以想像就是你看到完整受到核可的護照摟。

完整的流程應該會是 R + MVC,前面的 R 就是 Route

Route:負責指引你要瀏覽的位置及進行的動作
Model:負責與資料庫溝通、將我們的指令轉換成 SQL 語法,處理資料邏輯。
Views:負責畫面呈現。(專業的說法是表示回傳 HTML 的方法)
Controller:負責處理傳進來的資料流向、流程控制。

為什麼使用 MVC?

MVC 的目的就是分工,使用 MVC 架構的好處,在於這三者彼此獨立、各司其職,方便團隊進行開發,使程式碼更易於維護,「把不同意義的程式碼放在不同的檔案裡」。如果需要前後端分離,後端工程師可以專注於 Controller 及 Model 的部分,View 相關呈現就可以交給前端工程師去處理。

附上我之前課程上畫的醜醜圖片來幫大家簡單釐清概念


參考資料:

  1. 為你自己學 Ruby on Rails