淺析MVC模式與三層架構的區別三層架構和MVC是有明顯區別的MVC應該是展現模式(三個加起來以後才是三層架構中的UI層)
三層架構(tier application) 通常意義上的三層架構就是將整個業務應用劃分為表現層(UI)業務邏輯層(BLL)數據訪問層(DAL)區分層次的目的即為了高內聚低耦合的思想
表現層(UI)通俗講就是展現給用戶的界面即用戶在使用一個系統的時候他的所見所得
業務邏輯層(BLL)針對具體問題的操作也可以說是對數據層的操作對數據業務邏輯處理
數據訪問層(DAL)該層所做事務直接操作數據庫針對數據的增添刪除修改更新查找等
MVC是 ModelViewController嚴格說這三個加起來以後才是三層架構中的UI層也就是說MVC把三層架構中的UI層再度進行了分化分成了控制器視圖實體三個部分控制器完成頁面邏輯通過實體來與界面層完成通話而C層直接與三層中的BLL進行對話
mvc可以是三層中的一個表現層框架屬於表現層三層和mvc可以共存
三層是基於業務邏輯來分的而mvc是基於頁面來分的
MVC主要用於表現層層主要用於體系架構層一般是表現層中間層數據層其中表現層又可以分成MVC(Model View Controller)模型-視圖-控制器
曾把MVC模式和Web開發中的三層結構的概念混為一談直到今天才發現一直是我的理解錯誤MVC模式是GUI界面開發的指導模式基於表現層分離的思想把程序分為三大部分ModelViewController呈三角形結構Model是指數據以及應用程序邏輯View是指 Model的視圖也就是用戶界面這兩者都很好理解關鍵點在於Controller的角色以及三者之間的關系在MVC模式中Controller和View同屬於表現層通常成對出現Controller被設計為處理用戶交互的邏輯一個通常的誤解是認為Controller負責處理View和Model的交互而實際上View和Model之間是可以直接通信的由於用戶的交互通常會涉及到Model的改變和View的更新所以這些可以認為是Controller的副作用
MVC是表現層的架構MVC的Model實際上是ViewModel即供View進行展示的數據 ViewModel不包含業務邏輯也不包含數據讀取
而在N層架構中一般還會有一個Model層用來與數據庫的表相對應也就是所謂ORM中的O這個Model可能是POCO也可能是包含一些驗證邏輯的實體類一般也不包含數據讀取進行數據讀取的是數據訪問層而作為UI層的MVC一般不直接操作數據訪問層中間會有一個業務邏輯層封裝業務邏輯調用數據訪問層UI層(Controller)通過業務邏輯層來得到數據(Model)並進行封裝(ViewModel)然後選擇相應的View
MVC本來是存在於Desktop程序中的M是指數據模型V是指用戶界面C則是控制器使用MVC的目的是將M和V的實現代碼分離從而使同一個程序可以使用不同的表現形式比如一批統計數據你可以分別用柱狀圖餅圖來表示C存在的目的則是確保M和V的同步一旦M改變V應該同步更新
MVC如何工作MVC是一個設計模式它強制性的使應用程序的輸入處理和輸出分開使用MVC應用程序被分成三個核心部件模型視圖控制器它們各自處理自己的任務
視圖V視圖是用戶看到並與之交互的界面對老式的Web應用程序來說視圖就是由HTML元素組成的界面在新式的Web應用程序中HTML依舊在視圖中扮演著重要的角色但一些新的技術已層出不窮它們包括Macromedia Flash和象XHTMLXML/XSLWML等一些標識語言和Web services如何處理應用程序的界面變得越來越有挑戰性MVC一個大的好處是它能為你的應用程序處理很多不同的視圖在視圖中其實沒有真正的處理發生不管這些數據是聯機存儲的還是一個雇員列表作為視圖來講它只是作為一種輸出數據並允許用戶操縱的方式
模型M模型表示企業數據和業務規則在MVC的三個部件中模型擁有最多的處理任務被模型返回的數據是中立的就是說模型與數據格式無關這樣一個模型能為多個視圖提供數據由於應用於模型的代碼只需寫一次就可以被多個視圖重用所以減少了代碼的重復性
控制器C控制器接受用戶的輸入並調用模型和視圖去完成用戶的需求所以當單擊Web頁面中的超鏈接和發送HTML表單時控制器本身不輸出任何東西和做任何處理它只是接收請求並決定調用哪個模型構件去處理請求然後再確定用哪個視圖來顯示返回的數據
模型Model 模型是應用程序的主體部分模型表示業務數據或者業務邏輯 實現具體的業務邏輯狀態管理的功能
視圖View 視圖是應用程序中用戶界面相關的部分是用戶看到並與之交互的界面 就是與用戶實現交互的頁面通常實現數據的輸入和輸出功能
控制器controller 控制器工作就是根據用戶的輸入控制用戶界面數據顯示和更新model對象狀態起到控制整個業務流程的作用實現View層跟Model層的協同工作
層架構指表現層(顯示層) 業務邏輯層 數據訪問層(持久化)如果大家非要生搬硬套把它和MVC扯上關系話那我就只能在這裡強扭這個瓜了即V 層架構中表現層aspx頁面對應MVC中View(繼承的類不一樣)
C 三層架構中表現層的aspxcs頁面(類)對應MVC中的Controller理解這一點並不難大家想一想我們以前寫過的 Redirect當然它本身就是跳轉了一些鏈接頁面而MVC中的Controller要做的更爽它控制並顯示輸出了一個視圖即然所起到的作用都是對業務流程和顯示信息的控制只不過是實現手段不同而已
M 層架構中業務邏輯層和數據訪問層對應MVC中Model(必定View和Controller已找到婆家剩下Model只能是業務邏輯層和數據訪問層了)
為什麼要使用 MVC大部分Web應用程序都是用像ASPPHP或者CFML這樣的過程化(自PHP版本後已全面支持面向對象模型)語言來創建的它們將像數據庫查詢語句這樣的數據層代碼和像HTML這樣的表示層代碼混在一起經驗比較豐富的開發者會將數據從表示層分離開來但這通常不是很容易做到的它需要精心的計劃和不斷的嘗試MVC從根本上強制性的將它們分開盡管構造MVC應用程序需要一些額外的工作但是它給我們帶來的好處是無庸質疑的
首先最重要的一點是多個視圖能共享一個模型現在需要用越來越多的方式來訪問你的應用程序對此其中一個解決之道是使用MVC無論你的用戶想要Flash界面或是 WAP 界面用一個模型就能處理它們由於你已經將數據和業務規則從表示層分開所以你可以最大化的重用你的代碼了
由於模型返回的數據沒有進行格式化所以同樣的構件能被不同界面使用例如很多數據可能用HTML來表示但是它們也有可能要用Adobe Flash和WAP來表示模型也有狀態管理和數據持久性處理的功能例如基於會話的購物車和電子商務過程也能被Flash網站或者無線聯網的應用程序所重用
因為模型是自包含的並且與控制器和視圖相分離所以很容易改變你的應用程序的數據層和業務規則如果你想把你的數據庫從MySQL移植到Oracle或者改變你的基於RDBMS數據源到LDAP只需改變你的模型即可一旦你正確的實現了模型不管你的數據來自數據庫或是LDAP服務器視圖將會正確的顯示它們由於運用MVC的應用程序的三個部件是相互獨立改變其中一個不會影響其它兩個所以依據這種設計思想你能構造良好的松耦合的構件
對我來說控制器也提供了一個好處就是可以使用控制器來聯接不同的模型和視圖去完成用戶的需求這樣控制器可以為構造應用程序提供強有力的手段給定一些可重用的模型和視圖控制器可以根據用戶的需求選擇模型進行處理然後選擇視圖將處理結果顯示給用戶
拿一個簡單的登陸模塊說需求是你輸入一個用戶名密碼如果輸入的跟預先定義好的一樣那麼就進入到正確頁面如果不一樣就提示個錯誤信息你Y別在這兒蒙我輸入的不對!
V 這個小小的模塊中起始的輸入用戶名密碼的頁面跟經過校驗後顯示的頁面就相當於View C 而這裡還需要一個controller頁面就是用於接收輸入進來的用戶名密碼還有經過校驗後返回的一個flg(此flg就是用於判斷你輸入的是否正確而跳轉到相應的頁面的)
M 最後還缺一個Model那麼就是你那個用於校驗的類了他就是處理你輸入的是否跟預先訂好的一樣不一樣的之後返回一個flg這樣就完全實現了邏輯跟頁面的分離我頁面不管你咋整反正我就一個顯示而controller呢也不管你Model咋判斷對不對反正我給你了用戶名跟密碼你就得給我整回來一個flg來而Medol呢則是反正你敢給我個用戶名跟密碼我就給你整過去個flg
m 提供數據數據之間的關系轉化等並可以通知視圖和控制器自己哪些地方發生了變化
v 提供顯示能根據m的改變來更新自己c 比如視圖做了點擊一個按鈕會先發給這個視圖的控制器然後這個控制器來決定做什麼操作(讓模型更新數據控制視圖改變)
mvc是一個復合模式mvmc都是觀察者模式m內部的組件組合模式vc之間是策略模式(可以隨時更換不同的控制器)
MVC模式是上世紀年代提出最初用於Smalltalk平台上的
MVC是表現模式是用來向用戶展現的許多組建的一個模式(UI/Presentation Patten)
MVC有三種角色Model用來儲存數據的組件(與領域模型概念不同兩者會相互交叉)
View從Model中獲取數據進行內容展示的組件同樣的Model在不同的View下可展示不同的效果獲取Model的狀態而不對其進行操作
Controller接受並處理用戶指令(操作Model(業務))選擇一個View進行操作
MVC概述協作存在單向引用例如Model不知道View和Controller的存在View不知道Controller的存在這就隔離了表現和數據View和controller是單向引用而實際中View和Controller也是有數據交互的
MVC的重要特點是分離兩種分離View和數據(Model)的分離使用不同的View對相同的數據進行展示分離可視和不可視的組件能夠對Model進行獨立測試因為分離了可視組件減少了外部依賴利於測試(數據庫也是一種外部組件)
View和表現邏輯(Controller)的分離Controller是一個表現邏輯的組件並非一個業務邏輯組件MVC可以作為表現模式也可以作為建構模式意味這Controller也可以是業務邏輯分離邏輯和具體展示能夠對邏輯進行獨立測試
MVC和三層架構MVC與三層架構類似麼?
ViewUI Layer | ControllerBussiness Layer | ModelData Access Layer其實這樣是錯誤的MVC是表現模式(Presentation Pattern)
三層架構是典型的架構模式(Architecture Pattern)
三層架構的分層模式是典型的上下關系上層依賴於下層但MVC作為表現模式是不存在上下關系的而是相互協作關系即使將MVC當作架構模式也不是分層模式MVC和三層架構基本沒有可比性是應用於不同領域的技術
MVC模式與三層架構ui (view)←(contorller)
*****↓********↓******* bl (model)
*********************** da
From:http://tw.wingwit.com/Article/program/net/201311/13131.html