WebForm與MonoRail

來源:互聯網
上載者:User

本文所指WebForm,特指Microsoft在.NET平台上倡導的類似WinForm的組件式開發方式,所有Controller特指MonoRail裡的Controller非MVC裡的Controller。

  WebForm的開發理念源自於WinForm,基於控制項的拖放及後台代碼編寫的開發方式的而且確是很方便快捷的開發方法,WinForm的成功很好地說明了這一點。整個WebForm的核心就是控制項,以封裝手,重用為目的而存在的控制項使得WebForm極為容易上手。得力於WebForm方便快捷的開發方式,.NET在企業開發領域取得了巨大成功。

  HTTP協議是無狀態,WebForm為了要像WinForm那樣保持控制項的狀態,不得不依賴於ViewState/Postback這些機制。總的來說,WebForm是以控制項為核心,依賴於ViewState、Postback機制最終構成的。脫離了它們,WebForm則不能稱之為WebForm

  然而,控制項在帶來方便的同時,其產生的HTML代碼也難以維護;ViewState帶來狀態維護的方便,同時也造成了效能的損耗;在Postback機制中有一點讓我很困惑的是:很多時候我們要在Page_Load判斷是否第一次請求然後執行一些初始化(如綁定的動作)。為何Microsoft不在Page上加多一個Initialize之類的事件來代替現有的在Page_Load中判斷IsPostback。這樣做一來會比較優雅,二來也更加像WinForm了。

  再來看看aspx和cs,它們是WebForm表現代碼分離的形式,是的,僅僅只是表現代碼的分離而已。aspx上面的控制項依賴於後台cs的控制,而背景cs則依賴於aspx的存在。分離是物理上的,邏輯上它們還是緊密地結合在一起的,沒有了誰都不行。專業點來說,它們是耦合在一起的。

  在企業開發領域,由於軟體將會在企業內部有限範圍內使用,通常則不會對介面有太高要求,甚至大多數時候都是開發人員直接拼出來的介面。因此,WebForm產生的程式碼再噁心,再難以維護,aspx/cs耦合再嚴重也沒什麼影響。ViewState/Posback帶來的效能損耗在使用人數有限的公司專屬應用程式中也並不突出。所以用WebForm來代替一部份企業CS(Client/Server)應用好處是很明顯的,比如說,系統更新時只需補救伺服器,而不用每次分發用戶端。

  可是,畢竟不是所有使用.NET的人都在做企業開發,當用WebForm來做網站開發,我感覺就像牛刀殺雞一般。在網站開發的世界裡,我們的客人,通常會對介面會有所要求,甚至於有時候會要求產生的HTML代碼要符合W3C標準……所以,對HTML代碼的控制變得重要起來;另一方面,作為放在internet上供眾人瀏覽的網站,ViewState/Posback帶來的效能開銷變得不容忽視起來;aspx/cs耦合使得無法將它們作為設計師和程式員職責分離的承載體(特別是當程式員在頁面上扔一些SqlDataSource之類的控制項)。

  牛刀不是不能殺雞,但很多人畢竟不習慣用牛刀來殺雞。MVP(Model-View-Presenter)才是真正切合網站開發實際情況的開發方式。雖然WebForm比MonoRail要強大,很多,但它畢竟不適合我們做網站開發的。

  MonoRail就是適合網站開發的一套MVP開發架構。與WebForm的開發理念不同,它著重於職責的分離。當Controller(MonoRail中的Presenter稱為Controller)和View被切割隔離開來時,設計師和程式員和諧地分工合作也成為了可能(世事無絕對)。MVP的理念中,沒有控制項,沒有Posback,當然也沒有ViewState,用戶端和伺服器間的交流迴歸到了原始的Form/QueryString/Cookie的方式(難道這樣不是更自然嗎?),藉由此,設計師重新找回了對HTML代碼的控制權。程式員在Controller裡專註於資料的處理,設計師(我通常認為設計師應該具有一定的html知識)通過學習簡單的模板控制碼後,模板檔案則會成為他的勢力範圍。

  Contoller和View之間會通過鬆散的PropertyBag進行溝通,而不像WebForm的asp/cs那樣緊密(cs會對aspx上的控制項在在引用,或aspx上的控制項會綁定cs產生的資料)。因此,View對呈現的邏輯有絕對的控制權,而單純的View上的修改調整也不會對Controller產生影響。即使設計師把View全刪光了,程式也不會出錯,那麼,你就再也不必為設計師的過失而背黑鍋了。而本來應該由設計師完成的修改也不需要程式員來做了。

  無論是WebForm也好,MonoRail也好,最大的區別還是它們的理念。其實,只要你有好的意識,使用WebForm一樣也可以把介面和控制分離得很好;相反,在MonoRail的Controller裡一樣可以產生HTML代碼再傳給View……

 

追加兩個分別用WebForm和MonoRail實現購物車功能的Demo

Shopping Cart (WebForm)

Shopping Cart (MonoRail) 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.