熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET上的另一個MVC實現

2013-11-13 12:13:57  來源: .NET編程 

  在ASPNET MVC 正式版發布前Jeremy DMiller 和Chad Myers 就在ASPNET MVC的早期版本上進行了一些工作並對底層實現做了一些修改後來他們改掉了幾乎所有的ASPNET MVC實現於是決定構造另一個MVC實現FubuMVC 不久後Mark Nijhof 被邀請加入項目並成為主要成員

  Fubu代表For usby us現在FubuMVC除了使用ASPNET Routing外不使用任何ASPNET MVC的實現代碼而ASPNET Routing則已經包含在NET Framework SP

  Jon Arild Tørresda詢問了Chad MyersASPNET MVC與FubuMVC之間最大的不同是什麼

  如果非要選一個我選擇組合對繼承這是一個設計上的基本區別但並不是說ASPNET MVC的設計不好只是我認為ASPNET MVC在類結構設計上傾向於使用繼承因而無法像使用組合那樣易於設計動態的Web應用程序

  FubuMVC是一個前端控制器 (Front Controller)框架Chad指出這個模式的兩個主要目標是

  ·分離對請求的不同關注點
  ·允許使用組合的方式構造響應以發回給客戶端

  對於前端控制器Chad解釋道我們不是不能使用ASPNET MVC來實現前端控制器但是這非常的困難

  在FubuMVC中有很多實現方面的決定其中之一是在Controller的Action執行前後所執行的行為Chad解釋了為什麼他們管它叫行為以及它在FubuMVC中的意義

  當我在一個Virual ALTNET(VAN)會議上向一些人演示FubuMVC的早期版本時Steven Harman (http://stevenharmannet)建議我將之稱為行為因為這個詞語准確描述了所發生的事我有點喜歡這個名字

  在FubuMVC中行為的實現方式實際上是裝飾模式和職責鏈模式的混合體

  行為對請求管道擁有完全控制權它可以添加或修改請求動態選擇需要執行的action以及是否要執行action它可以修改或者完全替換action的輸出結果並且可以在完成請求處理後執行一些代碼實際上生成顯示結果本身也是一個行為FubuMVC使用行為本身來實現基本的功能這些基本功能和行為可以根據需要被替換或修改

  Mark Nijhof在他的文章FubuMVC and the Front Controller style framework中展示了這個管道

  Chad說行為開啟了在其他框架中難以實現的可能

  ·將整個請求包裝在try/catch/finally塊中的能力
  ·多級緩存的能力
  ·根據運行時環境或請求時間動態決定執行哪個action的能力

  MVC模式的另一個方面是使得開發人員可以對傳統意義上無法進行測試的UI部分進行單元測試Chad描述了微軟是如何實現這一點的

  微軟在最近對MVC框架的更新中(BetaRC和最終的發布版)邁出了一大步相比於Preview 對單元測試的支持更好了但是我仍然認為繼承和防備代碼的過度使用以及故意不使用接口使得在ASPNET MVC中進行測試顯得很笨重

  他繼續解釋了FubuMVC是如何實現這一模式的

  相反FubuMVC使用簡潔的易於mock的接口著重於高內聚低耦合的設計其中低耦合更成功一些但這一切仍在開發之中我希望將來的設計可以提高內聚程度

  FubuMVC高度依賴SOLID原則這使得它有很高的靈活性開發人員僅僅使用一個mock就可以替換框架中的整套部件並且可以使用任何他們喜歡的mock框架

  FubuMVC並沒有很多的防御性代碼……相反它將注意力集中在設計提供自由控制的組件上面這些組建是客戶代碼主要存在的地方控制器(controller)行為視圖(view)以及可以重載的部分

  FubuMVC的類之間幾乎沒有依賴關系僅有的依賴也是對接口的依賴這些接口可以很容易的用mock對象來模擬

  由於項目中有Jeremy(IoC容器StructureMap的創建者)你可能會認為控制反轉和IoC容器會得到較多的支持事實上也確實如此

  目前的版本僅支持StructureMap但是將來很可能會加入對其他容器的支持框架對於容器的使用非常少僅限於在配置時使用其余的部分利用容器的自動綁定功能完成因此基本上沒有使用service location對於僅有的一點service location我們使用微軟Patterns and Practices的Common Service Locator進行處理它可以讓我們方便的替換底層依附於CSL模式的IoC容器(多數容器都滿足這個條件)

  FubuMVC還有一個contrib project相比於FubuMVC的核心框架這個項目的目標有什麼不同:

  我們希望能夠有更多的自由來發展FubuMVC因此建立了FubuMVC Contrib我們想嘗試一下插件這樣可以有更多的人參與進來他們可以在較少的限制下做更多的嘗試同時保持核心框架的穩定

  FubuMVC核心框架將會維持少數幾個成員對待補丁會更謹慎對框架的修改也會更少FubuMVCContrib將會有更多的參與者更多的改動更低的要求可能有無法工作的代碼或實驗性質的代碼當在contrib中開發出有趣的東西後可以將這些東西合並到核心框架或者拆分到單獨的項目中

  現今FubuMVC還沒有ASPNET MVC那樣成熟但是它的實現方式很有趣這個框架將會如何發展它與ASPNET MVC的發展方向將會有怎樣的不同我們將拭目以待關於FubuMVC的更多信息可以查看他們的wiki和Ryan Kelley的從頭開始學FubuMVC教程


From:http://tw.wingwit.com/Article/program/net/201311/15452.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.