介紹ASP.NET MVC的實現
在ASP.NET MVC正式版發布前,Jeremy D.Miller 和Chad Myers 就在ASP.NET MVC的早期版本上進行了一些工作,并對底層實現做了一些修改。后來他們改掉了幾乎所有的ASP.NET MVC實現,于是決定構造另一個MVC實現FubuMVC ,不久后Mark Nijhof 被邀請加入項目并成為主要成員。
Fubu代表“For us,by us”。現在FubuMVC除了使用ASP.NET Routing外,不使用任何ASP.NET MVC實現代碼,而ASP.NET Routing則已經包含在.NET Framework 3.5 SP1中。
Jon Arild Tørresda詢問了Chad Myers,ASP.NET MVC與FubuMVC之間最大的不同是什么:
如果非要選一個,我選擇“組合對繼承”。這是一個設計上的基本區別,但并不是說ASP.NET MVC的設計不好,只是我認為ASP.NET MVC在類結構設計上傾向于使用繼承,因而無法像使用組合那樣易于設計動態的Web應用程序。
FubuMVC是一個前端控制器 (Front Controller)框架。Chad指出這個模式的兩個主要目標是:
◆分離對請求的不同關注點
◆允許使用組合的方式構造響應,以發回給客戶端
對于前端控制器,Chad解釋道:“我們不是不能使用ASP.NET MVC實現前端控制器,但是這非常的困難”。
在FubuMVC中有很多實現方面的決定,其中之一是在Controller的Action執行前后所執行的“行為”。Chad解釋了為什么他們管它叫行為,以及它在FubuMVC中的意義。
當我在一個Virual ALT.NET(VAN)會議上向一些人演示FubuMVC的早期版本時,Steven Harman (http://stevenharman.net)建議我將之稱為“行為”,因為這個詞語準確描述了所發生的事,我有點喜歡這個名字。
在FubuMVC中,行為的實現方式實際上是裝飾模式和職責鏈模式的混合體。
行為對請求管道擁有完全控制權,它可以添加或修改請求,動態選擇需要執行的action以及是否要執行action,它可以修改或者完全替換action 的輸出結果,并且可以在完成請求處理后執行一些代碼。實際上,生成顯示結果本身也是一個行為。FubuMVC使用行為本身來實現基本的功能,這些基本功能和行為可以根據需要被替換或修改。
【編輯推薦】