2010-12-07 88 views
9

我的公司正在試圖就如何追求未來發展做出明智的決定。ASP.NET MVP vs ASP.NET MVC

我們似乎已經將我們未來的內部和外部應用程序縮小爲Web應用程序。但從這一點來看,我們仍有點困惑。

這裏有大量的Sharepoint支持。據我瞭解,Sharepoint基本上是使用MVP的ASP.NET。

其他人想使用正常的ASP.NET使用較新的MVC風格。

我也被告知這些不容易在一起玩。

它看起來像Sharepoint(和ASP.NET MVP)將成爲贏家。在我們走向這個方向之前,我想問:

如果我們選擇將Sharepoint(即ASP.NET和MVP)的未來5-10年的開發工作基於此,我們放棄了什麼?這是一件大事,或者只是一些「很高興有」,我們正在失去。

(它必須是一個相當大的交易得到管理層現在改變方向。)

+0

是不是WCSF微軟的MVP? – 2010-12-07 15:26:24

+6

SharePoint不是ASP.Net MVP。它不能與MVC進行比較。從維基百科:「Microsoft Sharepoint是一種基於Web技術的服務器,可用於構建門戶網站,協作網站以及內容管理網站。它具有多種功能,支持各種企業和Web場景。它也受歡迎的文件管理解決方案# – jgauffin 2010-12-07 15:29:05

+0

@Yuriy是的Web客戶端軟件工廠是MVP的MS實施。與我一起工作非常繁重,以及我最後一次使用它的經驗(圍繞.NET 3.0,不,我不是說3.5),該項目甚至無法正常工作,它僅僅因爲嘗試綁定而面臨大量基本的IOC解析失敗標準MVP頁面。這是什麼導致我創建我的MVP框架 – 2010-12-07 15:39:48

回答

11

無論發生什麼,WebForms的會變成一個大丑亂在一些點。如果您必須使用webforms,請不要使用回發和頁面lifycycle模型 - 使用帶有演示者獲取請求的aspx頁面,並且每個帖子都有一個處理程序或空的aspx。這會讓MVC感覺更像MVC

2

無論您使用MVVM,MVC還是MVP,我一直都非常支持關注分離(SOC),這三種模式都非常好。有了這完全特定於ASP.NET,我會說你應該使用MVC3。

我一直是一個.NET開發人員多年,現在寫了我的MVP模式,它建立在StructureMap之上(我的博客上有很多關於它的內容),並且我從來沒有看到處理相關更改的好處從離開webforms到轉到MVC。然而,在處理ASP.NET這麼長時間之後,我剛剛用ASP.NET webforms錯誤完全不受我控制。

WebForms的主要錯誤發生在ViewState超時導致通用密碼異常,第二個是ViewState只是被客戶端截斷或者以某種方式導致合法加密錯誤發佈的地方。有了MVC,這些錯誤就不再適用了。在.NET4中,我試圖創建一個沒有ViewState的webforms應用程序,它們在.NET4中添加了新的功能,並且完全沒有工作,因爲webform時間已經過去了。

在MVC,MVC2和MVC3中,MVC3和Razor視圖引擎附帶的功能集是最強大的。除了可以使用Razor視圖引擎創建的更清晰的視圖外,您還可以獲得MVC2附帶的所有增強功能,除此之外,您還可以獲得全局動作過濾器和烘焙過的jQuery客戶端模板(我90%確定)。

我也會接近MVC非常類似於MVVM,其中我將有3個不同的實體集,我的視圖模型,我的域實體和我的物理數據庫模型。(最後一組可能或可能不是域實體,我已經開始意識到試圖讓您的純域實體與您的數據庫層協同工作可能在高級階段並不理想)

9

我會說你選擇什麼很大程度上取決於您的開發人員以及您打算構建的應用程序類型。

如果你建立很大程度上CRUD樣的應用程序,使大量使用第三方(或自己)的自定義控件的,然後用Web表單住可能是一個好主意。

如果你建立主要是「網絡」風格的應用程序有很多的客戶端功能,然後MVC是一個更好的選擇。

如果你有很大的新手開發者,Webforms可能會更好。如果你有更多有經驗的開發人員,即使他們對asp.net不熟悉,那麼MVC也許是更好的選擇。

如果您正在構建複雜的互連非常以數據爲中心的應用程序,然後MVC可能是一個更好的選擇。

有很多原因,你可能會選擇一個或另一個,它總是「這取決於......」。

此外,MVC和Webforms不完全不兼容。您不能在同一個網頁中使用它們,但可以在同一個網站中使用它們。此外,就像上面的評論所說,Sharepoint本身不是Webforms或MVP ..它是基於webforms的自己的東西。這非常「Webpart」導向,這只是一種說法,建立大量自定義控件。

0

根據我的經驗,對於以數據爲中心的複雜LOB應用程序,強制執行的MVP模式已經好很多。

由於演示者不瞭解網絡中心概念,所以MVP提供了更高的分離度。 由於視圖中沒有條件代碼,代碼覆蓋率也會增加。 我們有幾個應用程序,在Web和Windows應用程序之間使用演示者。 您演示referes到視圖的完整抽象,asp.net MVC依靠鑑於家屬的抽象(HttpContextBase等)

這一切說你需要這樣的設計在網頁表單,它不開箱,但如果你第一次做對了,並讓開發者理解並堅持下來,你最終會得到一個非常乾淨的解決方案。

有一些堅實的框架存在,以支持MVP在web表單:

http://www.codeguru.com/csharp/.net/net_general/patterns/article.php/c15173

webformsmvp點com和。

2

如果要執行頁面後背上來處理事件,我建議MVP的演示將包含該視圖的所有版本的事件處理程序(不同的用戶界面,比如網頁,iPhone,安卓,Windows窗體) ,具有統一的行爲。換句話說,您不需要在每個視圖的代碼隱藏中編寫控制事件。至少,他們只會調用Presenter的事件處理程序方法或引發Presenter處理的事件。

如果要創建Web應用程序和大量使用Ajax的網頁更新,與一個或多個網站的觀點和跨瀏覽器的JavaScript庫,如jQuery,我會建議MVC。

所以這取決於你想如何處理頁面事件。 MVP & MVC都有分離的擔憂。MVP更多基於服務器,更容易添加多個UI,MVC更基於客戶端,用於事件處理和更多以網絡爲中心。