2008-09-19 53 views

回答

166

ASP.net MVC的主要優點是:

  1. 允許在呈現的HTML的完全控制。

  2. 提供清晰的問題分離(SoC)。

  3. 啓用Test Driven Development (TDD)

  4. 與JavaScript框架輕鬆集成。

  5. 繼網頁的無狀態性質的設計。

  6. 啓用搜索引擎優化的RESTful網址。

  7. 沒有的ViewState和回發事件

ASP.net Web窗體的主要優點是:

  1. 它提供RAD發展

  2. 易發展模式那些來自winform開發者的開發者。

+32

關於SoC,人們可以通過編寫帶有許多業務邏輯甚至數據訪問代碼的「胖」控制器就像在網絡表單上使用它一樣搞砸了它。所以我會說SoC是編碼器必須提供的東西,fw不能提供幫助。 – rodbv 2008-12-12 15:22:45

+7

@ rodbv:非常真實,但是MVC確實會促使你朝着正確的方向發展,或者至少不會讓你跳過這些環節。所以,也許這一點應該看起來像'讓SoC更容易實現' – 2009-01-25 23:21:31

+4

它如何「啓用測試驅動開發」比任何其他方法? 我也困惑它如何允許HttpContext.RewritePath方法(字符串)自.NET 2.0後一直RESTful的URL? – 2010-09-09 15:48:56

9

對我而言,最大的優勢在於模型,視圖和控制器層之間的明顯分離。它從一開始就有助於促進良好的設計。

+4

我同意這是如果您以前從未使用過這種類型的模式,那麼這是一個主要賣點,但您可以在WebForms中實現您的MVC或MVP模式。 讓人們轉向模式而不是單獨使用數據集整合網絡表單的榮譽,但它們並不是我通常僱用的人員類型。 – 2010-09-09 16:00:10

6

網頁表單也從Telerik等第三方控制提供商的更成熟和支持中獲益。

+2

不要說這不能用MVC來完成,因爲我確信它已經存在了,但是如果你想用一大堆金光閃閃的工具把一個快速和骯髒的內聯網或外聯網應用捆綁在一起Telerik和WebForms很難被擊敗。火焰消失,這是誠實的事實。 – infocyde 2011-04-26 20:45:54

+0

Telerik也擁有MVC控件(更少,選項更少,但他們擁有它),而且它們比WebForm更快。 – Aidiakapi 2011-10-25 10:18:14

5

在webforms中,您也可以手動渲染幾乎整個html,除了像viewstate,eventvalidation和類似的幾個標籤,它們可以使用PageAdapters刪除。沒有人強迫你使用GridView或其他服務器端控件,它具有錯誤的HTML呈現輸出。

我會說MVC的最大優點是SPEED!

接下來是關注的強制分離。但它並不禁止你將整個BL和DAL邏輯放入Controller/Action中!這只是視圖的分離,也可以在webforms中完成(例如MVP模式)。人們提到mvc的很多事情都可以通過webforms完成,但需要額外的努力。
主要區別在於,請求來控制器,而不是查看,這兩個層是分開的,沒有通過像webforms(aspx +代碼背後)部分類連接

+0

你是說開發速度還是執行速度? – Jules 2009-01-25 23:42:56

+0

顯然執行速度。 – 2009-08-14 11:52:05

+1

特別是在使用MVC的telerik時。從他們的演示中,對網格進行排序需要:4頁(WebForms)500ms,84頁(MVC)200ms。對我來說,什麼是MVC的偏好(即使我們公司使用WebForms,我們認爲我們正在考慮製作切換器)是,它是否更清晰,是否有你的觀點,哪裏適應你的輸出,你的模型,你在哪裏混亂數據:P和你的控制器把它放在一起 – Aidiakapi 2011-10-25 10:22:39

14

如果您正在與其他開發人員,如PHP或JSP(以及我正在猜測的rails) - 你將在頁面上進行轉換或協作更容易,因爲你不會在任何地方都有那些'討厭'的ASP.NET事件和控件。

0

你不再爲使用'非回傳控件'而感到不快 - 並想知道如何將它們變成傳統的asp.net環境。

這意味着現代(免費使用的)JavaScript控件如thisthisthis都可以在沒有試圖將方圓釘放入方孔的情況下使用。

3

MVC讓你在頁面上有多個表單,我知道一個小功能,但它很方便!

另外,我覺得使MVC模式更容易維護,特別是,當你幾個月後重新訪問它。

4

我的2美分:

  • ASP.net形式是偉大的快速應用開發和增加商業價值迅速。我仍然將它用於大多數Intranet應用程序。
  • MVC是偉大的搜索引擎優化爲你控制的URL和HTML更大程度
  • MVC通常產生一個更爲精簡的頁面 - 沒有視圖狀態和更清潔的HTML =快速加載時間
  • MVC容易緩存部分的頁面。 -MVC是有趣的寫: - 個人意見;-)
1

我能看到的僅有的兩個優勢,爲較小的站點爲: 6)基於REST的網址,讓搜索引擎優化。 7)沒有ViewState和PostBack事件(以及更高的性能)

對於小型站點的測試不是問題,當站點編碼正確時,設計優勢也不是問題,MVC在許多方面混淆並使得更改變得更加困難製造。我仍在決定這些優勢是否值得。

我可以清楚地看到MVC在大型多開發者網站中的優勢。

1

我發現的主要好處是它強制項目成爲一個更可測試的結果。 這可以很容易地與webforms(MVP模式)完成,但需要開發人員瞭解這一點,許多不。

Webforms和MVC都是可行的工具,都在不同領域擅長。

因爲我們主要開發B2B/LOB應用程序,所以我個人使用Web表單。 但是我們總是用MVP模式來做到這一點,我們可以在單元測試中達到95 +%的代碼覆蓋率。 這也alows我們對 屬性值是通過視圖如

bool IMyView.IsAdminSectionVisible{ 
     get{return pnlAdmin.Visible;} 
     get{pnlAdmin.Visible=value;} 
    } 

) 暴露器WebControls的性質我不認爲這個水平測試作爲容易MVC achived,沒有poluting我的模型自動化測試。

11
  1. 適當的AJAX,例如, JSONResults否 部分頁面回發廢話。
  2. no viewstate +1
  3. 沒有重命名HTML ID。
  4. 清理HTML =沒有膨脹,並且在呈現XHTML或標準 兼容頁面時有體面的照片。
  5. 不再生成AXD javascript。
8

弗朗西斯·沙納漢,

  1. 你爲什麼叫局部回傳爲 「無稽之談」?這是Ajax的核心功能,並且在Atlas框架中得到了很好的利用,並且像Telerik一樣使用了很棒的第三方控件。我同意你關於視圖狀態的觀點。但是,如果開發人員仔細禁用視圖狀態,這可以大大減少呈現的HTML的大小,因此頁面變得輕量級。

  2. 只有HTML服務器控件在ASP.NET Web Form模型中被重命名,而不是純html控件。不管它是什麼,爲什麼你擔心重命名是否完成?我知道你想要在客戶端處理大量的JavaScript事件,但如果你巧妙地設計你的網頁,你一定可以得到你想要的所有ID

  3. 即使ASP.NET Web Forms符合XHTML標準,我也不會看不到任何腫脹。這不是我們爲什麼需要MVC模式的理由

  4. 再次,您爲什麼用AXD Javascript困擾?爲什麼它會傷害你?這不是一個有效的理由

到目前爲止,我是開發應用程序使用經典的ASP.NET Web窗體的粉絲。例如:如果你想綁定一個下拉列表或一個gridview,你需要最多30分鐘,不超過20行代碼(當然最小)。但在MVC的情況下,與開發人員討論它有多痛苦。

MVC最大的缺點是我們要回到ASP的日子。記住混合了服務器代碼和HTML的意大利麪代碼?哦,我的上帝,嘗試閱讀與JavaScript,HTML,JQuery,CSS,服務器標籤混合在一起的MVC aspx頁面,而不是......任何機構都可以回答這個問題?

91

ASP.NET Web Forms和MVC是由Microsoft開發的兩個Web框架 - 它們都是不錯的選擇。這兩個Web框架都不會被另一個替代,也沒有計劃將它們「合併」成一個框架。微軟並行地繼續支持和開發並不會「走開」。

這些Web框架中的每一個都提供了優點/缺點 - 其中一些需要在開發Web應用程序時予以考慮。 Web應用程序可以使用任何一種技術開發 - 它可能會使特定應用程序的開發更容易選擇一種技術,反之亦然。

ASP.NET Web窗體:

  • 發展支持國家 •給人的錯覺是一個Web應用程序是知道什麼用戶一直在做,類似於Windows應用程序。即使'嚮導'功能更容易實現。 Web表單在開發人員隱藏很多複雜性方面做得非常出色。
  • 快速應用程序開發(RAD) •能夠「跳入」並開始交付Web表單。這是一些MVC社區的爭議,但由微軟推動。最終,這歸結於開發人員的專業水平以及他們的滿意度。對於經驗較少的開發人員來說,Web表單模型對於學習曲線可能較少。
  • 更大的控制工具箱 •ASP.NET Web窗體提供了一個更強大,更強大的工具箱(Web控件),而MVC提供更基本的控制集依賴於通過jQuery(Javascript)進行的豐富的客戶端控件。
  • 成熟 •它自2002年以來一直存在,並且有關於問題,問題等的大量信息。提供更多第三方控制 - 需要考慮您現有的工具包。

ASP.NET MVC:

  • 分離的關注(SoC)的 •從技術角度來看,代碼中MVC的組織是非常乾淨的,有組織,有顆粒狀,使其更容易(有希望)讓Web應用程序按功能進行擴展。從發展的角度促進偉大的設計。
  • 更容易與客戶端工具(富用戶界面工具)集成 •Web應用程序比以往任何時候都變得越來越像您在桌面上看到的應用程序一樣豐富。使用MVC,它使您能夠與Web窗體中的這些工具包(如jQuery)更輕鬆,更無縫地集成。
  • 搜索引擎優化(SEO)友好/無國籍 •URL的更友好的搜索引擎(即mywebapplication.com/users/ 1 - 用1比mywebapplication /用戶/ getuser.aspx的ID檢索用戶(ID通過會議))。同樣,由於MVC是無狀態的,這消除了從同一個窗口產生多個Web瀏覽器的用戶頭痛(會話衝突)。沿着同樣的路線,MVC遵循無狀態的網絡協議,而不是「與之搏鬥」。
  • 適用於需要高度控制的開發人員 •ASP.NET網頁表單中的許多控件會自動生成您在呈現網頁時看到的大部分原始HTML。這可能會給開發人員帶來麻煩。使用MVC,它可以更好地控制呈現的內容並且不會有任何意外。更重要的是,HTML表單通常比Web表單小得多,這可以等同於提高性能 - 這是需要認真考慮的問題。
  • 測試驅動開發(TDD) •使用MVC,您可以更輕鬆地創建的東西在網絡側的測試。另外一層測試將爲防止意外行爲提供另一層防禦。

認證,授權,配置,編譯和部署是兩個Web框架之間共享所有功能。

13

MVC的問題在於,即使對於「專家」來說,它也耗費了大量寶貴的時間,並且需要付出很大的努力。無論背後的技術如何,企業都會被「快速解決方案」這個基本的東西驅動。 WebForms是一種節省時間和金錢的RAD技術。任何需要更多時間的事情都是企業無法接受的。

17

任何年齡足以記住經典ASP的人都會記得用html和javascript混合的代碼打開頁面的噩夢 - 即使是最小的頁面也很難找出它在做什麼。我可能是錯的,我希望是我,但MVC看起來像回到那些糟糕的過去。

當ASP.Net出現時,它被譽爲救世主,從內容中分離代碼,並允許我們讓網頁設計師創建HTML和編碼器來處理背後的代碼。如果我們不想使用ViewState,我們將其關閉。如果由於某種原因我們不想使用代碼,我們可以將代碼放入html中,就像傳統的ASP一樣。如果我們不想使用PostBack,我們重定向到另一個頁面進行處理。如果我們不想使用ASP.Net控件,我們使用標準的html控件。如果我們不想在控件上使用ASP.Net runat =「server」,我們甚至可以詢問Response對象。

現在,有人以他們的偉大智慧(可能是從未編程過傳統ASP的人)已經決定是時候回到混合代碼與內容的時代,並稱之爲「關注點分離」。當然,你可以創建更清晰的html,但你可以使用傳統的ASP。要說「如果你的視圖中有太多的代碼,你不能正確編程」就像是說「如果你在經典的ASP中編寫結構合理和評論的代碼,它比ASP.NET更乾淨,更好」

如果我我希望回到混合代碼與我想用PHP開發的內容,這種開發具有更加成熟的環境。如果ASP.NET有這麼多問題,那麼爲什麼不解決這些問題呢?

最後但並非最不重要的新Razor引擎意味着更難區分html和代碼。至少我們可以在ASP中尋找開始和結束標記,即<%和%>,但現在唯一的跡象就是@符號。

現在可能是遷移到PHP的時候了,再等10年纔有人再次將代碼與內容分離。

9

我在ASP.Net中沒有看到MVC的任何優勢。 10年前,微軟提出了UIP(用戶界面流程)作爲MVC的答案。這是一個失敗。當時我們用UIP做了一個大型項目(4名開發者,2名設計師,1名測試者),這真是一場噩夢。

不要爲了炒作而跳入潮流。上面列出的所有優點已經可以在Asp.Net中獲得(在Asp.Net 4中進行了更多精細的調整[New features in Asp.Net 4])。

如果您的開發團隊或具有Asp.Net的單一開發人員家族只是堅持使用它,並快速製作漂亮的產品以滿足您的客戶(誰支付您的工作時間)。 MVC會吃了你寶貴的時間,併產生相同的結果Asp.Net :-)

2

MVC控制器:

[HttpGet] 
    public ActionResult DetailList(ImportDetailSearchModel model) 
    { 
     Data.ImportDataAccess ida = new Data.ImportDataAccess(); 
     List<Data.ImportDetailData> data = ida.GetImportDetails(model.FileId, model.FailuresOnly); 

     return PartialView("ImportSummaryDetailPartial", data); 
    } 

MVC視圖:

<table class="sortable"> 
<thead> 
    <tr><th>Unique Id</th><th class="left">Error Type</th><th class="left">Field</th><th class="left">Message</th><th class="left">State</th></tr> 
</thead> 
<tbody> 
    @foreach (Data.ImportDetailData detail in Model) 
    { 
    <tr><th>@detail.UniqueID</th><th class="left">@detail.ErrorType</th><th class="left">@detail.FieldName</th><th class="left">@detail.Message</th><th class="left">@detail.ItemState</th></tr> 
    } 
</tbody></table> 

有多難呢?沒有ViewState,沒有BS頁面生命週期...只是純粹高效的代碼。

0

使用MVC可以輕鬆處理現代JavaScript控件以及JSON請求。在那裏,我們可以使用很多其他機制將數據從一個操作發佈到另一個操作。這就是爲什麼我們更喜歡MVC而不是Web表單。此外,我們可以構建輕量級頁面。

0

我個人的看法是, 最大的DIS-優勢,使用ASP.Net MVC是CODE BLOCKSHTML混合...
HTML地獄誰維護它的開發者...