[TOC] MVC "MVC 維基百科,自由的百科全書" MVC 是軟體工程的一種軟體架構模式,它不是具體的技術,而是一種代碼分層的理念,主要體現了職責分離原則。 M Model 模型 V View 視圖 C Controller 控制器 對 MVC 的誤解及緣由 誤解:頁面視圖 = View ,E ...
目錄
MVC
MVC 是軟體工程的一種軟體架構模式,它不是具體的技術,而是一種代碼分層的理念,主要體現了職責分離原則。
M-Model 模型
V-View 視圖
C-Controller 控制器
對 MVC 的誤解及緣由
誤解:頁面視圖 = View ,Entity 和 Dto = Model
緣由:因為剛入坑程式員職業的時候,接觸的是 ASP.NET Web Form 項目,而 ASP.NET Web Form 對於 Controller 和 View 的職責並沒有很好的規劃和定義,所以自己就很粗暴的把頁面視圖認為是 View 層。View 頁面散列在各個 Controller 之下,雖竭力將文件夾命名清晰,但因為 Model 沒有很好的實現,Dto亂飛,數據訪問代碼在 Controller 隨處可見,某些 Controller 文件中代碼堆積,各種邏輯全在 Controller 層。
嘗試優化:將 View 歸置到一個文件夾之下,將 Entity 和 Dto 獨立類庫,分出數據訪問層 DataAccess 和 業務邏輯層 Business ,通用方法層 Common
項目結構大概是
- Demo.Web
- Views
- Controllers
- Demo.Entity
- Demo.Dto
- Demo.DataAccess
- Demo.Business
- Demo.Common
不太完美的結果:優化之後代碼結構比之前的要清晰許多,Controller 放數據綁定代碼和對參數的XSS校驗和Sql註入校驗。但是新的問題出現,資料庫欄位變動或者業務調整,Model 層的改動涉及到了 Entity、Dto、DataAccess、Business。在此不作 ASP.NET Web Form 和 ASP.NET MVC 的優劣比對。
MVP
MVP 是 MVC 模式的延伸,不是替代品。
P:Presenter
Presenter 包含著組件的事件處理,負責檢索 Model 獲取數據,和將獲取的數據經過格式轉換與 View 進行溝通。
摘自 Model-view-presenter - 維基百科,自由的百科全書
在我看來 Presenter 層應該是被包含在 Business 層,因為規劃時對 Business 層的部分職責預想和上述引用完全一致。因為沒有更具體地規劃 Presenter ,所以後期項目中 Business 層和 Controller 層中參雜了本應由 Presenter 層承擔的職責代碼,降低了項目的可維護性。
MVVM
MVVM有助於將圖形用戶界面的開發與業務邏輯或後端邏輯(數據模型)的開發分離開來,這是通過置標語言或GUI代碼實現的。MVVM的視圖模型是一個值轉換器,[1] 這意味著視圖模型負責從模型中暴露(轉換)數據對象,以便輕鬆管理和呈現對象。在這方面,視圖模型比視圖做得更多,並且處理大部分視圖的顯示邏輯。[1] 視圖模型可以實現中介者模式,組織對視圖所支持的用例集的後端邏輯的訪問。
ViewModel 作為中介者,屏蔽了數據綁定過程代碼和GUI代碼,藉助 XMAL 標記語言可以輕鬆完成複雜的 GUI 展示。WPF 的強大不用多說。
在此推薦兩個按照 MVVM開發模式的開源項目
- riganti/dotvvm: Open source MVVM framework for Web Apps
- dotnetcore/WTM: WTM框架是針對中小規模後臺管理系統的開發利器。基於DotNetCore,實現0編碼創建項目,0編碼生成業務模塊。框架嚴格遵循MVVM的開發模式,並深得MVVM的精髓。對於新手,可以快速上手搭建項目;對於高手,可以把那些繁瑣重覆的工作交給框架生成,專心攻剋需求難點。框架經過數十個真實項目檢測,可以極大提高開發效率,降低開發成本。