本節書摘來自異步社群《精通 asp.net mvc 3 架構(第三版)》一書中的第1章,第4節,作者: 【美】adam freeman , steven standerson,譯者: 林逸 , 李萍 , 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
精通 asp.net mvc 3 架構(第三版)
如同任何新技術一樣,因為其存在就必須使用它,這并不是一個充分的理由。在以下小節中,我們将給出mvc架構與大多數流行的替代品比較所得到的我們的觀點。作為編寫一本關于mvc架構書籍的人,我們兩人盡可能做到沒有偏見,但我們知道,這受限于我們的客觀情況。以下小節是基于技術的比較。當選擇一個web應用程式架構時,也應當考慮:在技術層面上,團隊的技能、移植現有項目所涉及的工作、開發者的關系以及信心等方面的因素。
前面已經詳述了傳統asp.net web form的弱點與局限性,以及asp.net mvc是如何克服這些問題的。但這并不意味着web form的消亡,微軟反複聲明,對這兩種技術都會積極地加以發展和支援,而且也沒有要引退web form的計劃。在某些方面,對兩者的選擇是一種開發理念方面的事情。
web form的觀念是ui應當是狀态化的,并最終在http和html之上添加一個複雜的抽象層,用視圖狀态和回發(post-back)來建立狀态化的效果。這使得它适合于“拖—放”式windows form風格的開發。其間,開發者把ui部件拖放到一個畫布上,并在其中填寫其事件處理函數的代碼。
mvc采納了http真正的無狀态本質,遵循而不是違背它。這要求你了解web應用程式實際的工作方式。在了解的前提下,提供一種簡單的、功能強大的、現代的方法來編寫web應用程式。這些程式代碼整潔、易于擴充和維護,并且清除了離奇的複雜性和令人痛苦的限制。
當然在某些特定情況下,web form會表現得與mvc一樣甚至更好。明顯的例子是開發小型的、企業内部型應用程式,其大量的工作是把網格直接綁定于資料庫表,或通過向導對使用者進行引導。當你不必擔憂帶寬消耗或搜尋引擎優化時,web form的“拖—放”式開發優點可能勝過它的缺點。
另一方面,如果你正在編寫用于internet的應用程式,或大型intranet應用程式,那麼mvc所提供的帶寬效率、更好的浏覽器相容性,以及更好的自動測試支援等将發揮極大優勢。
如果要把一個現有的asp.net web form項目遷移到mvc,你就會開心地發現,這兩種技術可以并存于同一個應用程式之中。這為逐漸遷移現有應用程式提供了機會,特别是利用域模型或事務邏輯單獨地對web form的頁面進行限制,而把應用程式分成若幹層次的情況尤其如此。在有些情況下,你甚至可以故意把一個應用程式設計成兩種技術的混用。
rails已經成為與其他web平台進行比較的一個基準。微軟.net世界的開發者和公司會發現asp.net mvc易于使用和學習,而工作于linux或mac os x上的python或ruby開發者和公司會發現rails更容易。從rails遷移到asp.net mvc是不可能的,反之亦然。兩種技術之間有一些本質上的差别。
rails是一種整體開發平台,即它處理整個技術堆棧,從通過orm進行資料庫源控制,到用控制器和動作處理請求,所有這一切都可以用内建的自動測試工具來完成。
asp.net mvc架構專注于以mvc模式用控制器和動作來處理web請求。它不具有内置的orm工具、内置的自動測試工具,或管理資料庫遷移的系統,這是因為.net平台在這些功能方面已經提供了廣泛的選擇,你可以使用其中任意一種。例如,如果你正在尋找orm工具,可以采用nhibernate、subsonic、微軟的實體架構,或其他任意一種成熟可用的解決方案。這就是寬松的.net平台,盡管這實際意味着它不像rails那樣,把這些元件都內建到asp.net mvc之中。
monorail是一個早期的基于.net mvc的web應用程式平台,它是自2003年以來作為開源項目castle的一部分來建立和開發的。在許多方面,monorail就像是asp.net mvc的原型。monorail示範了如何在asp.net上建立一個類似于rails的mvc體系結構,并完全使用微軟的實作來建立要運用的模式、實踐和術語等。
我們未把monorail視為一個嚴格的競争者。它可能是雷德蒙德(微軟總部——譯者注)之外建立的最流行的.net web應用程式平台,而且當時确實得到了相當廣泛的應用。但自從asp.net mvc釋出之後,已經很少聽到monorail項目的消息了。.net web開發領域的狂熱和創新勢頭現在主要集中在asp.net mvc上。
本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。