最近几周,在博客、Twitter 和论坛上如火如荼地展开了一场讨论。讨论的内容是:开发人员是否应该使用或学习 ASP.NET MVC 。从“不推荐学习”到“所有 ASP.NET 开发人员都应该学习”,各种不同的观点层出不穷。InfoQ 对其中部分讨论内容进行了总结。
Rob Conerey ( SubSonic 之父,目前是微软 ASP.NET MVC 团队的一员)解释了为什么开发人员应该学习 ASP.NET MVC 。在文章的开始,他称 WebForms 是一个“巨大的谎言”。
WebForms 是个谎言,它是一个被种种谎言和欺骗所包围着的抽象机制。你对 WebForms 所做的一切都与 Web 无关 - 它帮你做了本该你自己做的事。
朋友们,这可是件大事(至少对我来说):你工作在谎言中。Web 是“无”状态的,它依赖一种叫做 HTML 的东西,并使用另一种叫做 HTTP 的东西通过电缆将 HTML 发来发去-你需要了解它、热爱它并在骨子里感受它。
Rob 列举了 7 个使用 ASP.NET MVC 的理由,或者用他的话说“避免被称为怪人的 7 个理由”:
- 可测试性
- 完全控制 HTML
- 可扩展
- 促使你思考
- 易于客户端 Javascript 编程
- 可以学到新的东西
- 有趣
然后总结到:
结论:Web 编程再一次充满了乐趣,至少对我和我的猫来说。当然这又是一个关于 WebForms 和 MVC 的比较,但是更直接一些。你几乎无法找到不学习 MVC 的理由 - 当然,对你来说可能还是有一两个理由,促使你继续使用 WebForms。
Joe Brinkman ( DotNetNuke 的全职开发人员)迅速的做出了回应,批评 Rob 没有找到一个“好”的学习 MVC 的理由,并列出了他自己的:
- 学习一种不同的架构
- 强迫你熟悉 HTML 和 HTTP
- MVC 促进了单元测试
- MVC 将使你意识到你对 WebForms 有多少是想当然的
Joe 总结道:
你真的应该试一试 MVC,但不是因为 Rob 所列举的那些原因。你应该尝试,MVC 是因为最终你会学到一些东西,它可以使你成为更好的 Web 开发人员,这与你最后选择了哪个平台无关。
Rob 和 Joe 基本上都同意,ASP.NET 开发人员应该学习 ASP.NET MVC,但是对于学习的原因还有争议。然而 Karl Seguin 持有不同的观点,他质疑道:“ ASP.NET MVC 是一个半成品么?”:
能够以更清晰的方式构造复杂的系统是一个好的开始,但是对于一般的 Web 开发,特别是与其他平台比较来说,ASP.NET MVC 还是要落后很多(Perl 是我能想到的唯一一个更糟糕的)。
最大的问题在于,它只是一个 VC - 没有对 Model 的考虑、支持和相关的工具。当你将自己写的数千行 repository/dal/linq/nhibernate 代码与其他 MVC 平台(通常只需要你的 model 继承一个类)比较时,你显然已经在生产力方面处于严重的劣势。但是深层次的影响更糟 - 你失去了 controller 和 view 上的内聚性,没有任何方法可以从 Model 的属性来自动生成 HTML 标签或者是客户端验证。
……
当然 ASP.NET MVC 也有好的方面,它的体系结构是可重用的,这使得像 S#arp Architecture 这样的项目得以实现。然而我仍然怀疑,这样的项目是否真的能够比集成的更好的框架更成功。
Jeremy D. Miller ( FubuMVC 的创造者之一)列出了一些正面的和负面的因素:
负面的:
……除非你愿意卷起袖子构建你自己项目的体系结构来充当“M"、获取更好的测试性、拥有更简单的视图同步机制以及更高效的 Html helpers,否则 ASP.NET MVC 的生产力并不高……
正面的:
使用这个 MVC 框架很简单和直接,还可以根据需要进行定制。
Jeremy 总结道:
我觉得 ASP.NET MVC 最终会是一种比“被种种谎言和欺骗所包围着的抽象机制”更好的 Web 程序开发方式,但是现在它仅仅适合那些乐于尝鲜的人。
Jeffrey Palermo (目前正在撰写“ASP.NET MVC in action”)发表了“你不应该使用 ASP.NET MVC, 如果”:
- 你对多态不是“非常”的熟悉
- 你不喜欢在这个框架上构建应用程序
- 你依赖于很多第三方的 UI 控件
- 你不喜欢使用开源的程序
他继续说道:
ASP.NET MVC 不是一个“束缚你手脚”的框架,也不是一个“ASP.NET 入门”框架,你可以完全控制所有的东西。在 Web 的世界里,UI 还没有标准化到可以使用框架来控制,并以一种“标准”的方式来生成。相反数据访问已经可以了,我们知道我们需要创建、读取、更新、删除、级联存储、延时加载等等。很多 ORM 都支持这些操作,很多开发人员放弃了对数据访问的完全控制,因为这和 ORM(Hibernate/NHibernate)工作的方式非常相似。
虽然还有其他很多人也表达了自己的观点,但是 InfoQ 认为本文已经覆盖了绝大多数对于学习 / 使用 ASP.NET MVC 的观点。
评论