ASP.NET上的另一个MVC实现:FubuMVC2011-04-17 infoq 在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使用行为本身来实现 基本的功能,这些基本功能和行为可以根据需要被替换或修改。Mark Nijhof在他的 文章FubuMVC and the Front Controller style framework中展示了这个管道:

<