1. 程式人生 > >三層架構和MVC的區別

三層架構和MVC的區別

三層架構和MVC是有明顯區別的,MVC應該是展現模式(三個加起來以後才是三層架構中的UI層) 三層架構(3-tier application) 通常意義上的三層架構就是將整個業務應用劃分為:表現層(UI)、業務邏輯層(BLL)、資料訪問層(DAL)。區分層次的目的即為了“高內聚,低耦合”的思想。 1、表現層(UI):通俗講就是展現給使用者的介面,即使用者在使用一個系統的時候他的所見所得。    2、業務邏輯層(BLL):針對具體問題的操作,也可以說是對資料層的操作,對資料業務邏輯處理。    3、資料訪問層(DAL):該層所做事務直接操作資料庫,針對資料的增添、刪除、修改、更新、查詢等。 
MVC是 Model-View-Controller,嚴格說這三個加起來以後才是三層架構中的UI層,也就是說,MVC把三層架構中的UI層再度進行了分化,分成了控制器、檢視、實體三個部分,控制器完成頁面邏輯,通過實體來與介面層完成通話;而C層直接與三層中的BLL進行對話。
mvc可以是三層中的一個表現層框架,屬於表現層。三層和mvc可以共存。 三層是基於業務邏輯來分的,而mvc是基於頁面來分的。 MVC主要用於表現層,3層主要用於體系架構,3層一般是表現層、中間層、資料層,其中表現層又可以分成M、V、C,(Model View Controller)模型-檢視-控制器 

曾把MVC模式和Web開發中的三層結構的概念混為一談,直到今天才發現一直是我的理解錯誤。MVC模式是GUI介面開發的指導模式,基於表現層分離的思想把程式分為三大部分:Model-View-Controller,呈三角形結構。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和象XHTML,XML/XSL,WML等一些標識語言和Web services. 如何處理應用程式的介面變得越來越有挑戰性。MVC一個大的好處是它能為你的應用程式處理很多不同的檢視。在檢視中其實沒有真正的處理髮生,不管這些資料是聯機儲存的還是一個僱員列表,作為檢視來講,它只是作為一種輸出資料並允許使用者操縱的方式。 模型M 模型表示企業資料和業務規則。在MVC的三個部件中,模型擁有最多的處理任務。被模型返回的資料是中立的,就是說模型與資料格式無關,這樣一個模型能為多個檢視提供資料。由於應用於模型的程式碼只需寫一次就可以被多個檢視重用,所以減少了程式碼的重複性。 控制器C 控制器接受使用者的輸入並呼叫模型和檢視去完成使用者的需求。所以當單擊Web頁面中的超連結和傳送HTML表單時,控制器本身不輸出任何東西和做任何處理。它只是接收請求並決定呼叫哪個模型構件去處理請求,然後再確定用哪個檢視來顯示返回的資料。
模型Model 模型是應用程式的主體部分。模型表示業務資料,或者業務邏輯. 實現具體的業務邏輯、狀態管理的功能。 檢視View 檢視是應用程式中使用者介面相關的部分,是使用者看到並與之互動的介面。 就是與使用者實現互動的頁面,通常實現資料的輸入和輸出功能。 控制器controller 控制器工作就是根據使用者的輸入,控制使用者介面資料顯示和更新model物件狀態。起到控制整個業務流程的作用,實現View層跟Model層的協同工作。
3層架構指:表現層(顯示層) 業務邏輯層 資料訪問層(持久化)如果大家非要“生搬硬套”把它和MVC扯上關係話那我就只能在這裡"強扭這個瓜"了即: V 3層架構中"表現層"aspx頁面對應MVC中View(繼承的類不一樣) C 三層架構中"表現層"的aspx.cs頁面(類)對應MVC中的Controller,理解這一點並不難,大家想一想我們以前寫過的 Redirect,當然它本身就是跳轉了一些連結頁面,而MVC中的Controller要做的更爽,它控制並顯示輸出了一個檢視。即然所起到的作用都是對業務流程和顯示資訊的控制,只不過是實現手段不同而已。 M 3層架構中業務邏輯層和資料訪問層對應MVC中Model(必定View和Controller已找到“婆家”剩下Model只能是業務邏輯層和資料訪問層了)
為什麼要使用 MVC 大部分Web應用程式都是用像ASP,PHP,或者CFML這樣的過程化(自PHP5.0版本後已全面支援面向物件模型)語言來建立的。它們將像資料庫查詢語句這樣的資料層程式碼和像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是一個複合模式 mv,mc都是觀察者模式 m內部的元件組合模式 vc之間是策略模式(可以隨時更換不同的控制器)

MVC模式是上世紀70年代提出,最初用於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與三層架構類似麼? View-UI Layer  |   Controller-Bussiness Layer  |  Model-Data Access Layer 其實這樣是錯誤的 MVC是表現模式(Presentation Pattern) 三層架構是典型的架構模式(Architecture Pattern) 三層架構的分層模式是典型的上下關係,上層依賴於下層。但MVC作為表現模式是不存在上下關係的,而是相互協作關係。即使將MVC當作架構模式,也不是分層模式。MVC和三層架構基本沒有可比性,是應用於不同領域的技術。

MVC模式與三層架構:

ui (view)←(contorller)