在上回 [Day1] 學習C#的計畫與期望 - C#&AspNetCore 中介紹了自己的目的。
在這回中主要介紹MVC的核心概念。
MVC是什麼?
MVC模式(Model–view–controller)是軟體工程中的一種軟體架構模式(software design pattern),把軟體系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。
模型(Model)
程式設計師編寫程式應有的功能(實現演算法等等)、資料庫專家進行資料管理和資料庫設計(可以實現具體的功能)。
這邊通常放資料存取的屬性、比較複雜的資料處理。
在這個單元裡面,我們通常會定義資料的結構、型態、存取func,必要時會將資料的驗證寫在這個單元中。
視圖(View)
介面設計人員進行圖形介面設計。
簡單來說就是前台,處理HTML/CSS/JS。
將資料視覺化,並呈現給使用者。
控制器(Controller)
負責轉發請求,對請求進行處理。
當使用者進到了前台的視圖(View),對畫面操作所觸發的事件就會跑到控制器。
在控制器裡負責拿到模型(Model)的資料後加上些業務邏輯後返視圖(View)。
負責處理主要商業邏輯處理,資料格式處理,大部分介於Model 與 View 之間,處理資料流的溝通。
我的疑問
Controller與Model很難劃清界限,過去在寫Laravel時就遇到類似問題。
因為在Controller常要對不同的請求,有不同資料回應。
而在Model裡對資料庫操作的存取函式就會滿足不了需求,變成要一直增加。
免不了在Controller操作Model甚至寫SQL,因為這樣比較直覺,不用再去想Model增加可能共用的函式。
如果撇除這問題,MVC架構已經算是不錯了,能夠有架構的避免義大利麵Code的問題。
實現MVC框架
如果選對有Design Pattern的框架在寫的過程比較不會那麼痛苦。因為比較能知道哪邊的東西放在哪邊。
如我上面的疑問,其實不是在Controller就是在Model。好找出問題來源,達成目標才是主要目的。
Java:Spring MVC
C#:ASP.NET MVC
PHP:Laravel
其實還有很多,我這只列出我曾經有碰過或未來可能會碰的。
MVC 優缺點
優點
- 好分工,團隊開發能各司其職
- 可維護性高(因具備架構性好找錯誤源頭)
缺點
- 如果是一頁式簡單網站容易殺雞用牛刀
如果實際開發下去,有寫過MVC跟沒寫過的人應該都會選MVC,因為坑少- -+。
此外,即使要開發前後分離架構,也可以MVC再搭配一套前端框架,作為未來需要特別畫面需求的輔助。
總結
MVC能夠協助一個專案進行有效的分工,讓人比較能各司其職,如:視覺就是專注在View,而工程師專注在Model、Controller。
整體架構上也讓未來維護的人有個底,如果想看這段邏輯寫在哪那就從Controller開始,找不出原因在看Model。
相較於過去,這頁面需要A資料,就把資料查詢、邏輯到回應都寫在一個頁面上難以維護的慘況好很多了@@。
參考資料
https://zh.wikipedia.org/wiki/MVC
https://ithelp.ithome.com.tw/articles/10191216
https://dotblogs.com.tw/dog0416/2016/05/20/131644
https://ithelp.ithome.com.tw/articles/10194428