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