目錄php
MVC 是軟件工程的一種軟件架構模式,它不是具體的技術,而是一種代碼分層的理念,主要體現了職責分離原則。git
M-Model 模型程序員
V-View 視圖github
C-Controller 控制器數據庫
誤解:頁面視圖 = 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 ,通用方法層 Commonmvc
項目結構大概是框架
不太完美的結果:優化以後代碼結構比以前的要清晰許多,Controller 放數據綁定代碼和對參數的XSS校驗和Sql注入校驗。可是新的問題出現,數據庫字段變更或者業務調整,Model 層的改動涉及到了 Entity、Dto、DataAccess、Business。在此不做 ASP.NET Web Form 和 ASP.NET MVC 的優劣比對。
MVP 是 MVC 模式的延伸,不是替代品。
P:Presenter
Presenter 包含着組件的事件處理,負責檢索 Model 獲取數據,和將獲取的數據通過格式轉換與 View 進行溝通。
摘自 Model-view-presenter - 維基百科,自由的百科全書
在我看來 Presenter 層應該是被包含在 Business 層,由於規劃時對 Business 層的部分職責預想和上述引用徹底一致。由於沒有更具體地規劃 Presenter ,因此後期項目中 Business 層和 Controller 層中參雜了本應由 Presenter 層承擔的職責代碼,下降了項目的可維護性。
MVVM有助於將圖形用戶界面的開發與業務邏輯或後端邏輯(數據模型)的開發分離開來,這是經過置標語言或GUI代碼實現的。MVVM的視圖模型是一個值轉換器,[1] 這意味着視圖模型負責從模型中暴露(轉換)數據對象,以便輕鬆管理和呈現對象。在這方面,視圖模型比視圖作得更多,而且處理大部分視圖的顯示邏輯。[1] 視圖模型能夠實現中介者模式,組織對視圖所支持的用例集的後端邏輯的訪問。
ViewModel 做爲中介者,屏蔽了數據綁定過程代碼和GUI代碼,藉助 XMAL 標記語言能夠輕鬆完成複雜的 GUI 展現。WPF 的強大不用多說。
在此推薦兩個按照 MVVM開發模式的開源項目