上个星期,Castle项目的创始人Hamilton Verissimo与MS MVC开发团队讨论了如何把Castle/MonoRail集成进MS MVC的方法,以及向他们通报了Castle团队从现实应用中得到的所有的复杂和违反直观的需求,向他们提出了该如何处理这些需求的建议。
他编写了一些集成例程,作为MS MVC的可扩展性和插拔性的概念验证(proof-of-concept)。他说,他实现了IParameterBinder的初始支持,实现了NVelocity View Factory支持,实现了REST支持和集成了Castle的DataBinder和ActiveRecordDataBinder。他发现了一些他想要实现却实现不了的东西,譬如重用MonoRail的helpers(因为这些东西和MonoRail的内核耦合太强了),建立Brail View Factory(同样的理由),建立视图工厂的选图器(会影响可测试性)。
总的来说,他对MS MVC框架的做法非常满意,但他也指出,.NET社区对即将发布的MS MVC框架CTP版本别抱太高的期望。他说,因为你将看到的是个非常小的框架,要在实战中有用还需要做很多东西,第一个CTP版的发布主要是为了获得用户的反馈,之后的版本将会非常棒。
关于Castle MonoRail的将来,Hamilton说要看到MS MVC框架的最终版和它包括的功能集之后才能决定,他说,他要求MS MVC框架应该试着支持MonoRail支持的所有的东西,但不确定MS MVC团队是否会那么做。MonoRail 2.0将取决于MS MVC框架的实现。如果MS MVC框架的最终版非常棒,提供了众多的功能,他会放弃MonoRail 2.0。但如果MS MVC框架的最终版很明显地缺少什么东西,那么MonoRail 2.0可以重用MS MVC框架提供的基础设施,提供一些非常棒的扩展。
Eleutian Technology的Aaron Jensen同意Hamilton的观点,他说,他希望MonoRail变得更像Rails一样,建立于MS MVC之上,进一步推广“约定胜于配置(Convention over Configuration)”的概念,包括提供生成器等,将MonoRail推向更高的水平,成为.NET web 平台上社区真正需要的框架。
其他人指出了MonoRail的routing功能的缺陷,他们说,在RoR和MS MVC中,Routing是一等公民,而在MonoRail中的Routing好像是个事后加上去的东西。为什么Routing是否是一等竟是那么重要?因为, 1) 有助于遵守DRY(别重复自己)原则,routing引擎和URL生成之间的紧密集成允许对URL进行轻松和安全的重构;2)提高可测试性,在MonoRail中对route的测试,需要做end-to-end的集成测试。如果routing是一等的类对象,那么就可以对它们做隔离测试。
Hamilton对routing问题已经有了解决方案,他开发了一个新的MonoRail routing引擎,可以在MonoRail SVN上下载。
Ben Scheirman在他的一篇博客中则讨论了相关的微软技术和开源技术的问题,结论是,System.Web.MVC能够达到的使用者是MonoRail达不到的,因为很多企业都使用微软技术,而且在这空间工作的开发人员也不在少数。