在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使用行为本身来实现基本的功能,这些基本功能和行为可以根据需要被替换或修改。
【编辑推荐】