天天看點

三層架構與MVC的差別菜鳥學飛基地

菜鳥學飛基地

偶會勤勤懇懇灌溉這裡滴一畝三分田

三層架構與MVC的差別

http://baike.baidu.com/view/687468.htm

與MVC的差別  MVC(模型Model-視圖View-控制器Controller)是一種設計模式,我們可以用它來建立在域對象和UI表示層對象之間的區分。

  同樣是架構級别的,相同的地方在于他們都有一個表現層,但是他們不同的地方在于其他的兩個層。

  在三層架構中沒有定義Controller的概念。這是我認為最不同的地方。而MVC也沒有把業務的邏輯通路看成兩個層,這是采用三層架構或MVC搭建程式最主要的差別。當然了。在三層中也提到了Model,但是三層架構中Model的概念與MVC中Model的概念是不一樣的,“三層”中典型的Model層是以實體類構成的,而MVC裡,則是由業務邏輯與通路資料組成的。

http://topic.csdn.net/u/20090710/14/07f4447d-60c4-4b74-af1c-ea1b6e2e9ca7.html

當然啊,你要明白三層架構的MVC的差別和聯系:

三層架構是最基本的項目分層結果,而MVC則是三層架構的一個變體,MVC是一種好的開發模式。首先你要明白MVC分别代表的是什麼意思.

M 即Model(模型層),主要負責出來業務邏輯以及資料庫的互動

V 即View(視圖層),主要用于顯示資料和送出資料

C 即Controller(控制器),主要是用作捕獲請求并控制請求轉發

三層:UI 界面層 BLL 業務邏輯層,DAL資料通路層,Model 實體層

MVC中的的M 不是三層中的Model(實體層),他其實包括三層中的 BLL,DAL,Model,這是非常要注意的,這也是他們之間的差別的關鍵所在

其有點有如下:

低耦合性

高重用性和可适用性

較低的生命周期成本

快速的部署

可維護性

有利于軟體工程化管理

當然優點也有缺點,那就是内部結構複雜,不容易了解,檔案數量大,管理難度自然也就大

MVC設計模式…

三層架構…

他們細分之後得到的是:View(UI)、BIZ(BLL)、DAO(DAL)、Entity(Model)、Controller

MVC把 BIZ(BLL)、DAO(DAL)、Model(Entity) 統一稱之為 模型(MODEL),得到:View、Controller、 模型(MODEL)

三層 在我使用中 暫未體會到控制器的存在,完全是:UI、DAO、BLL

他們相同的設計理念就是:把視圖設計與資料持久化進行分離,進而降低耦合性,易于擴充,提高團隊開發效率。

三層是基于業務邏輯來分的,而mvc是基于頁面來分的

根本就沒有什麼可比性。

其實兩個一起用我感覺很好

MVC模式是一種複合設計模式,一種解決方案

三層是種軟體架構,通過接口實作程式設計

三層模式是體系結構模式,MVC是設計模式

三層模式又可歸于部署模式,MVC可歸于表示模式

引用樓主 daijun17 的回複:

如何在三層架構和mvc之間進行取舍呢?

沒有什麼取舍的,說的根本不是一回事。在所謂的“三層”中,它要求你将BLL層獨立出來,它隻是告訴你表示層和業務邏輯層之間的靜态關系。而MVC則告訴你在這個具體的地方如何處理其動态驅動流程,盡管mvc仍然粗糙(甚至mvp也是粗糙的),但是已經比所謂三層更細緻一些了。

謝謝大家的關注,這幾天都在忙面試,沒來結貼。再次謝謝大家。

我大概明白了:三層架構和mvc設計模式側重點不一樣,三層是一種籠統的架構思想,沒有限制具體的設計;而mvc就比較具體的說明它的設計方法。

還是自己動手做一下,了解會更深一些,以前都是用三層架構的方法

 ---------------------------------------------------------------------------------------------------------------

http://apps.hi.baidu.com/share/detail/15057889

ASP.NET MVC 與 WebForm 三層架構 差別

1.傳統WebForm開發中存在的一些問題

傳統的ASP.NET開發中,微軟的開發團隊為開發者設計了一個在可視化設計器中拖放控件,編寫代碼響應事件的快速開發環境。然而,它所帶來的負面效應是:

由于控件封裝了很多東西,開發者很難了解這背後的HTML是如何運作的

容易得到一個包含大量ViewState的頁面,使得頁面尺寸遠遠超過所需的内容,使得頁面的打開速度較慢

不容易被測試

2.什麼是MVC?

MVC(Model-View-Controller,模型-視圖-控制器模式)是軟體工程中的一種軟體架構模式。它把軟體系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。

3.什麼是ASP.NET MVC?

ASP.NET MVC是微軟的開發團隊基于MVC開發的一個易于被測試的架構。它具有以下特性:

沒有資料回傳

沒有在頁面中儲存視圖狀态

開發者可以完全掌控頁面的呈現過程

易于單元測試

易于測試驅動開發

可擴充、可替換

支援WebForm中的有關特性,如:使用者控件、母版頁、資料綁定、本地化等

不在基于檔案目錄結構,而是将URL映射到控制器中

4. 為什麼使用ASP.NET MVC?

易于進行單元測試

易于進行測試驅動開發

避免了WebForm中大量的ViewState導緻頁面檔案變得臃腫

5. MVC與三層架構?  

MVC是一種模式

ASP.NET MVC是一個基于MVC模式的開發架構

三層架構是一種架構

至于差別,可以嚴格的從概念上區分開來。

下圖是MVC與三層架構的對應關系

三層架構與MVC的差別菜鳥學飛基地

6. MVC與Webform如何抉擇?   

三層架構與MVC的差別菜鳥學飛基地

7. 兩種技術并存

ASP.NET MVC架構隻是給開發者提供歐諾個了開發web應用程式的一種選擇,并不是要取代Webform

這兩種技術各有優缺點,開發者需要根據實際情況,選擇對應的技術

有時候,可以在同一個項目中混合使用這兩種技術

8.ASP.NET MVC與Webform技術的架構圖

三層架構與MVC的差別菜鳥學飛基地

總結:

看完本文,相信ASP.NET WebForm與ASP.NET MVC的選擇相信大家應該可以做到心中有數了,我始終覺得,很多時候并不是什麼技術好不好的問題,而是适合不适合不适合的問題或者能否把它用好的問題。

打個比方:如果讓千裡馬犁地,恐怕未必能達到理想的效果,最終可能還會抱怨,什麼破馬,一點勁都沒有。

 ========================================================================

http://blog.sina.com.cn/s/blog_677b66170100mv16.html

asp.net  mvc和三層架構聯系與差別

首先,MVC和三層架構,是不一樣的。

  三層架構中,DAL(資料通路層)、BLL(業務邏輯層)、WEB層各司其職,意在職責分離。

  MVC是 Model-View-Controller,嚴格說這三個加起來以後才是三層架構中的WEB層,也就是說,MVC把三層架構中的WEB層再度進行了分化,分成了控制器、視圖、實體三個部分,控制器完成頁面邏輯,通過實體來與界面層完成通話;而C層直接與三層中的BLL進行對話。

  是以, .net的三層結構中,并沒有action這個概念。

  asp.net mvc 是微軟新釋出的一種網站開發架構。為了解決傳統asp.net開發中不能分離Model,View和Controller而設計的。

  普通的網站為了解決可移植,可維護,可擴充等問題,會把網站設計成三個獨立的子產品,Model負責資料庫部分,View負責網頁的界面,而Controller負責界面與資料的互動及業務邏輯,這樣設計的網站如果想設計或者重新開發某一個子產品對其他的子產品是沒有影響的。但是asp.net的頁面背景代碼與每個頁面代碼都是一一對應的,業務邏輯在某些情況下不可避免的被寫到了與View關聯的背景代碼中。這樣就不能保證View與Controller的分離,也就很難實作網站的重寫和更新。

  而在MVC中頁面代碼并不是與背景代碼一一對應,而是分别被存放成Controller和View兩個部分,徹底的解決了,View和Controller不能獨立的問題。進而改善網站的重寫和更新過程。

  但是MVC也有其缺點,由于在頁面代碼中不再可以使用伺服器控件,是以給某些asp.net伺服器端控件的使用帶來了麻煩,而且MVC也頁面的設計工作帶來了很多障礙。

  ASP.NET MVC 是微軟在2009年4月份釋出的一種新的網站開發架構,http://msdn.microsoft.com/en-us/library/dd394709.a spx,它是把傳統意義上的MVC開發思想融合到了ASP.NET的開發當中。

  那麼我也來講講我對這兩者的了解吧。

  首先對這個題目,本身是存在問題的,"XX結構"與"XX模式"的差別?請問中國社會制度與美國人生活方式有什麼差別?

  這兩者本身講的是不同方向與角度的問題,在實際應用中他們的确存在一些相似的特點,在很多書籍中也沒有深入講解,以緻于造成困惑,為了更好的了解他們,姑且來說說差別吧。

  首先N層結構是一種軟體抽象的層次結構,是對複雜軟體的一種縱向切分,每一層次中完成同一類型的操作,以便将各種代碼以其完成的使命作為依據來分割,以将低軟體的複雜度,提高其可維護性。一般來說,層次之間是向下依賴的,下層代碼未确定其接口(契約)前,上層代碼是無法開發的,下層代碼接口(契約)的變化将使上層的代碼一起變化。三層結構是N層結構的一種,是人産在長時間使用中得出來的一種應用場合廣泛的N層結構,被當作一種典型的軟體層次結構而廣為流傳甚至寫入教科書。

  MVC模式是一種複合設計模式,一種在特定場合用于解決某種實際問題來得出的可以反複實踐的解決方案。巧合的是他也有三個事物組成,于是乎人們就有了一種想當然的對應關系:展示層-View;業務邏輯層-Control;持久層-Model。首先MVC中的三個事物之間并不存在明顯的層次結構,沒有明顯的向下依賴關系,相反的,View和Model往往是比較獨立的,而Control是連接配接兩者的橋梁,他們更像是橫向的切分。這樣一來就出現一個結果,MVC中每個塊都是可以獨立測試的,而三層結構中,上層子產品的運作測試勢必要提供下層代碼或者提供相同接口的樁。相對來說,MVC複雜得多,但是結構更清晰,耦合性更低。

  另外,MVC中每一塊内部特别是Model内部經常被設計為多層的。在我認為的一個良好的MVC模式建構的結構中,Control是核心,小且較為穩定的,可以作為一個核心架構來提供,有擴充點,但基本上可以簡單配置不需要任何代碼就可以運作。而View則可能是一套或多種可選擇的視圖引擎,決定了軟體展示給用于的界面,使用時的主要工作量在于擴充點以及根據需要而數量不同的視圖模闆。Model則是業務提供者,決定了軟體提供的功能,其内部可能是一些普通的類或者是實作了某些接口的類,在這一塊當中可能根據業務的不同而色彩缤紛,對于複雜的軟體可能會分成很多層,如業務邏輯層、業務提供層、系統提供層、資料提供層、資料通路層等。

  我經常用于比喻MVC的例子是小時候玩的那種卡帶式遊戲機,Control是主機,一般來說我買一個主機就行了,隻要他不壞,他就能一直讓我玩這一類的遊戲。View則是電視機和遊戲搖桿,電視機可以獨立工作,他不管輸入的是電視信号、影碟機信号還是遊戲機信号,他隻管顯示,而且他決定了我們看到的效果是怎麼樣的,如果我想要個尺寸更大的或者彩色的顯示效果,我隻需要買個相應的電視機就行了,搖桿也是可以換的,要遙杆還是帶震動的。Model則是遊戲卡帶,他絕定了我玩的是什麼遊戲,是魂鬥羅還是超級瑪莉,而且遊戲機主機和電視機生産廠家永遠也不知道在上面有可能會運作什麼樣的遊戲。卡帶中可能會有遊戲代碼和存儲單元,都根據遊戲的需要而設計。

  有朋友提到遊戲主機提供的卡帶插槽的接口,在設計中,有時也由Control提供一組接口,以用于Model或View的實作,這樣就形成了依賴。一般來說這樣設計也沒有太大的問題,隻是會提高子產品間的耦合度,也會帶來一些侵入性。為了更完美,可以不用接口來提供契約,可以用配置資訊(或稱中繼資料資訊)+反射來提供契約,那麼這個類接口就可以退化到隻要符合CLS就可以了,也就是普通的類,就像現在的計算機接口廣泛采用USB,無論是U盤、列印機、掃描器或者是加密狗,他們都是普通的USB裝置而已。

  提到USB有一個題外話,子產品的可插拔性設計甚至是熱插拔設計,系統可以在不停止運作的情況下動态的挂載或移除子產品,動态挂載子產品需要系統能夠自動發現新子產品并根據自描述的資訊進行自動配置,移除可能情況更複雜一點,需要"安全删除硬體"類似的功能。

  在設計廣泛重用的架構時會考慮多種情況以達到更大的适應性,一般項目中應用MVC模式可以較為随意。

分類: .NET基礎, 他山之石 綠色通道: 好文要頂 關注我 收藏該文 與我聯系

三層架構與MVC的差別菜鳥學飛基地
三層架構與MVC的差別菜鳥學飛基地

小奈魯

關注 - 6

粉絲 - 26 +加關注 0 0 (請您對文章做出評價) « 上一篇: 【轉】MVC設計模式

» 下一篇: 斐波那契數列非遞歸算法(fibonacci)

posted on 2011-04-12 08:31 小奈魯 閱讀(6242) 評論(2) 編輯 收藏

三層架構與MVC的差別菜鳥學飛基地

評論

#1樓 2012-07-04 00:19 銀色小貓  

三層架構與MVC的差別菜鳥學飛基地

感謝樓主的分析,看了明白了一點點。 支援(0) 反對(0)   

#2樓26474822013/4/1 16:58:20 2013-04-01 16:58 sharp.M  

三層架構與MVC的差別菜鳥學飛基地

比較全面 支援(0) 反對(0)   

重新整理評論 重新整理頁面 傳回頂部 注冊使用者登入後才能發表評論,請 登入 或 注冊, 通路網站首頁。 找優秀程式員,就在部落格園

部落格園首頁 博問 新聞 閃存 程式員招聘 知識庫 最新IT新聞:

· 索尼終止1366x768筆記本生産

· MIT機器人為你組裝宜家家具

· 日本超強手機降噪技術 可屏蔽99%風聲

· 小米要開實體店 你猜是北京還是深圳?

· Pinterest明星軟體工程師麥克斯威爾加盟雅虎

» 更多新聞... 最新知識庫文章:

· 程序與線程的一個簡單解釋

· 那些觸動人心的産品細節

· 如何組織大型JavaScript應用中的代碼?

· 想爬得更高,需要知道的數學體系

· 談談對BPM的了解

» 更多知識庫文章...

導航

  • 部落格園
  • 首頁
  • 新随筆
  • 聯系
  • 訂閱
    三層架構與MVC的差別菜鳥學飛基地
  • 管理

統計

  • 随筆 - 265
  • 文章 - 0
  • 評論 - 38
  • 引用 - 0

公告

昵稱: 小奈魯

園齡: 3年2個月

粉絲: 26

關注: 6 +加關注

搜尋

常用連結

  • 我的随筆
  • 我的評論
  • 我的參與
  • 最新評論
  • 我的标簽

最新随筆

  • 1. 【轉】C#背景調用前台頁面js方法
  • 2. 【ZT】Oracle CASE WHEN 用法介紹
  • 3. sql中exists,not exists的用法
  • 4. sql server的随機函數newID()和RAND()
  • 5. 提高資料庫效率的一些方法--eg:大批量循環插入資料的簡化
  • 6. 2013.1.28 - dt是System.DataTable和Excel.DataTable 之間的不明确的引用
  • 7. jQuery擷取Select選擇的Text和 Value
  • 8. oracle視圖總結(轉)
  • 9. [轉]System.ArgumentException: 回發或回調參數無效。在配置中使用 < pages enableEventValidation="true"/> 或在頁面中使用 <% @ Page EnableEventValidation="true" %> 啟用了事件驗證
  • 10. 【ZT】asp.net表單驗證控件使用收集

我的标簽

  • GridView(1)
  • RadGrid ItemIndex Cells 單元格(1)
  • tooltip(1)
  • web.config(1)

随筆分類

  • .NET基礎(152)
  • ASP相關(19)
  • Crystal Reort(5)
  • CSS(3)
  • GridView(22)
  • HTML(5)
  • IIS(7)
  • jQuery/AJAX(14)
  • JS(19)
  • Oracle(23)
  • Remedy(2)
  • SqlServer(41)
  • VB(10)
  • web.config(10)
  • 菜鳥心情(6)
  • 資料庫(16)
  • 他山之石(75)
  • 學飛軌迹(141)

随筆檔案

  • 2013年5月 (1)
  • 2013年3月 (1)
  • 2013年2月 (3)
  • 2013年1月 (4)
  • 2012年12月 (1)
  • 2012年11月 (2)
  • 2012年10月 (1)
  • 2012年9月 (3)
  • 2012年7月 (3)
  • 2012年6月 (6)
  • 2012年5月 (5)
  • 2012年3月 (3)
  • 2012年2月 (1)
  • 2012年1月 (1)
  • 2011年12月 (3)
  • 2011年10月 (2)
  • 2011年9月 (7)
  • 2011年8月 (6)
  • 2011年7月 (6)
  • 2011年4月 (12)
  • 2011年3月 (20)
  • 2011年2月 (13)
  • 2011年1月 (20)
  • 2010年12月 (9)
  • 2010年11月 (14)
  • 2010年10月 (13)
  • 2010年9月 (16)
  • 2010年8月 (18)
  • 2010年7月 (12)
  • 2010年6月 (28)
  • 2010年5月 (15)
  • 2010年3月 (11)
  • 2010年2月 (6)

技術參考手冊

  • ADO手冊
  • ASP手冊
  • CSS手冊
  • HTML手冊
  • JScript手冊
  • SQL手冊
  • VbScript手冊
  • 網頁特效

學習前輩好榜樣

  • ASP.NET 魔法學院 (rss)
  • 著有《ASP.NET專題實務》的一個有意思的台灣作者
  • ASP.NET 魔法學院(繁體)

最新評論

  • 1. Re:三層架構與MVC的差別
  • 比較全面
  • --sharp.M
  • 2. Re:The file or Assembly &amp;quot;BMC.arnettoc.dll&amp;quot; or a dependency could not be found.
  • 兄台在哪裡高就?也是做remedy的嗎?我自己封裝了一個remedy .net api,BMC論壇上那個太臃腫了。
  • --P_Chou
  • 3. Re:JS中URL編碼參數(UrlEncode)
  • 收藏;
  • --tinyphp
  • 4. Re:It is an error to use a section registered as allowDefinition=&#39;MachineToApplication&#39; beyond application level
  • 請問樓主解決沒有。怎麼解決 的,求回複。
  • --Arvin_
  • 5. Re:【ZT】利用反射排序泛型List
  • 關于反射排序那塊 sort排序,會不斷的調用Compare方法,一直反射是不是效率會受一些影響啊,如果能反射一次就好了!
  • --No89757

閱讀排行榜

  • 1. JS中URL編碼參數(UrlEncode)(44601)
  • 2. (轉)GridView固定表頭(8297)
  • 3. 【轉】Delete,Update與left join(6717)
  • 4. Oracle時間戳(6712)
  • 5. oracle 類型轉換函數(6377)

評論排行榜

  • 1. (轉)GridView固定表頭(7)
  • 2. 20100525 學習記錄:關于釋出網站嵌套的bin檔案夾 和 Could not create type....報錯 = =+(4)
  • 3. JS中URL編碼參數(UrlEncode)(4)
  • 4. 重生(2)
  • 5. 三層架構與MVC的差別(2)

推薦排行榜

  • 1. JS中URL編碼參數(UrlEncode)(3)
  • 2. 【轉】httpHandlers和httpModules深度剖析(2)
  • 3. 【轉】HTTP協定及其POST與GET操作差異 & C#中如何使用POST、GET等(2)
  • 4. GridView 事件和用法(2)
  • 5. 【轉】Delete,Update與left join(2)

Powered by:

部落格園

Copyright © 小奈魯 

繼續閱讀