天天看点

《精通 ASP.NET MVC 3 框架(第三版)》----1.4 谁该使用ASP.NET MVC

本节书摘来自异步社区《精通 asp.net mvc 3 框架(第三版)》一书中的第1章,第4节,作者: 【美】adam freeman , steven standerson,译者: 林逸 , 李萍 , 更多章节内容可以访问云栖社区“异步社区”公众号查看。

精通 asp.net mvc 3 框架(第三版)

如同任何新技术一样,因为其存在就必须使用它,这并不是一个充分的理由。在以下小节中,我们将给出mvc框架与大多数流行的替代品比较所得到的我们的观点。作为编写一本关于mvc框架书籍的人,我们两人尽可能做到没有偏见,但我们知道,这受限于我们的客观情况。以下小节是基于技术的比较。当选择一个web应用程序框架时,也应当考虑:在技术层面上,团队的技能、移植现有项目所涉及的工作、开发者的关系以及信心等方面的因素。

前面已经详述了传统asp.net web form的弱点与局限性,以及asp.net mvc是如何克服这些问题的。但这并不意味着web form的消亡,微软反复声明,对这两种技术都会积极地加以发展和支持,而且也没有要引退web form的计划。在某些方面,对两者的选择是一种开发理念方面的事情。

web form的观念是ui应当是状态化的,并最终在http和html之上添加一个复杂的抽象层,用视图状态和回发(post-back)来创建状态化的效果。这使得它适合于“拖—放”式windows form风格的开发。其间,开发者把ui部件拖放到一个画布上,并在其中填写其事件处理函数的代码。

mvc采纳了http真正的无状态本质,遵循而不是违背它。这要求你理解web应用程序实际的工作方式。在理解的前提下,提供一种简单的、功能强大的、现代的方法来编写web应用程序。这些程序代码整洁、易于扩展和维护,并且清除了离奇的复杂性和令人痛苦的限制。

当然在某些特定情况下,web form会表现得与mvc一样甚至更好。明显的例子是开发小型的、企业内部型应用程序,其大量的工作是把网格直接绑定于数据库表,或通过向导对用户进行引导。当你不必担忧带宽消耗或搜索引擎优化时,web form的“拖—放”式开发优点可能胜过它的缺点。

另一方面,如果你正在编写用于internet的应用程序,或大型intranet应用程序,那么mvc所提供的带宽效率、更好的浏览器兼容性,以及更好的自动测试支持等将发挥极大优势。

如果要把一个现有的asp.net web form项目迁移到mvc,你就会开心地发现,这两种技术可以并存于同一个应用程序之中。这为逐步迁移现有应用程序提供了机会,特别是利用域模型或事务逻辑单独地对web form的页面进行约束,而把应用程序分成若干层次的情况尤其如此。在有些情况下,你甚至可以故意把一个应用程序设计成两种技术的混用。

rails已经成为与其他web平台进行比较的一个基准。微软.net世界的开发者和公司会发现asp.net mvc易于使用和学习,而工作于linux或mac os x上的python或ruby开发者和公司会发现rails更容易。从rails迁移到asp.net mvc是不可能的,反之亦然。两种技术之间有一些本质上的差别。

rails是一种整体开发平台,即它处理整个技术堆栈,从通过orm进行数据库源控制,到用控制器和动作处理请求,所有这一切都可以用内建的自动测试工具来完成。

asp.net mvc框架专注于以mvc模式用控制器和动作来处理web请求。它不具有内置的orm工具、内置的自动测试工具,或管理数据库迁移的系统,这是因为.net平台在这些功能方面已经提供了广泛的选择,你可以使用其中任意一种。例如,如果你正在寻找orm工具,可以采用nhibernate、subsonic、微软的实体框架,或其他任意一种成熟可用的解决方案。这就是宽松的.net平台,尽管这实际意味着它不像rails那样,把这些组件都集成到asp.net mvc之中。

monorail是一个早期的基于.net mvc的web应用程序平台,它是自2003年以来作为开源项目castle的一部分来创建和开发的。在许多方面,monorail就像是asp.net mvc的原型。monorail演示了如何在asp.net上建立一个类似于rails的mvc体系结构,并完全使用微软的实现来建立要运用的模式、实践和术语等。

我们未把monorail视为一个严格的竞争者。它可能是雷德蒙德(微软总部——译者注)之外创建的最流行的.net web应用程序平台,而且当时确实得到了相当广泛的应用。但自从asp.net mvc发布之后,已经很少听到monorail项目的消息了。.net web开发领域的狂热和创新势头现在主要集中在asp.net mvc上。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。