BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

《Test-Drive ASP.NET MVC》 节选与作者访谈

| 作者 Jon Arild Tørresdal 关注 0 他的粉丝 ,译者 赖勤毅 关注 0 他的粉丝 发布于 2010年11月9日. 估计阅读时间: 12 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

今天,InfoQ发布了 Jonathan McCracken撰写的《Test-Drive ASP.NET MVC》的部分节选,我们刚好利用这次机会对作者进行一次访谈。

《Test-Drive ASP.NET MVC》这本书全面地介绍了ASP.NET MVC测试驱动开发(TDD)。另外,本书还覆盖了ASP.NET MVC中特别令人期待的领域,作者使用NHibernate作为后端持久化,用REST来优化交互,并展示了可复用的方式来对交付的系统进行高效部署。这本书的目标读者既包括ASP.NET的开发人员,也包括非微软平台的开发人员。

作为访谈的一部分,InfoQ还提供了一些优惠券,读者买这本书可以获得25%的折扣。使用密码“InfoQTestDrive ”在 http://www.pragprog.com/titles/jmasp/test-drive-asp-net-mvc可以获得优惠券。

InfoQ:您写《Test-Drive ASP.NET MVC》这本书的动机是什么?

Jonathan: 我从事.NET领域的开发已经有9年左右,并在两年前讲授C#教学班的时候与ASP.NET MVC不期而遇。当在别的项目中使用Ruby On Rails框架开发的时候,我发现微软也发布了一些相似的东西,这使我很激动。这是几年中第一次由衷的对微软的产品感到兴奋,我想将它分享给这个世界。我觉得写本书应该会有助于它的传播。

另外一个很大的推动力就是测试驱动开发。Kent Beck写的《Test Driven Development By Example》是我最喜欢的技术书籍之一。很多技术性的书籍通常把涉及到软件测试的内容放到后面的章节(譬如第九章或者第十章),这让我很无奈。我认为整个项目从头到尾都要测试先行(Test-First)。这样的话,你不仅学习了MVC框架,还学到如何对其进行测试。

InfoQ: 在您的书里面提到了:经验丰富的微软开发人员可能对TDD的重要性觉得生疏。您为何这样认为呢?

Jonathan: 我批评的是Visual Basic。微软曾经在市场方面针对它的工具和产品做了一次大型的调查统计,专门研究这些不熟悉TDD技术的开发人员。大概有许多使用微软工具(或者其它厂商)的开发人员并没有注意其它可选的工具。这意味着,直到现在,TDD,依赖注入和开源工具都还没有大幅度的普及。
但是,时代在变,越来越多的公司开始采用这些技术和工具,因为已经证实它们非常高效。如果这本书的读者是一位不熟悉ASP.NET MVC与TDD的开发人员,这本书可以教会你所有这一切。

有一群.NET的开发团队推崇ALT.NET信念,ALT.NET指的是既擅长MS平台开发又同时关注TDD,并天天实践TDD的一群人。(注:更多关于ALT.NET的信息,请访问: http://msdn.microsoft。com/zh-cn/magazine/cc337902.aspx)

InfoQ: 微软引入MVC框架的工作做的太晚了,但却有绝佳的好机会,他们可以从现存的MVC框架中挑选不同的特性。以您的经验来看,微软的MVC框架与其它框架相比,有没有什么不完善或者失策的地方?

Jonathan: 首先,我认为把ASP.NET MVC从所有的持久化框架中分离是很明智的。我一直不喜欢在Rails里面使用ActiveRecord(我知道这在Rail3.0中已经做修改了)。作为一个开发者,我可以为项目选择一种更好的持久化机制——可能是MogoDB、Oracle(指:TopLink)或者是Nhibernate。

到目前为止,我觉得不完善的地方应该是2.0的MVC版本可以使用更好的验证模型(validation model)。我不喜欢在把模型传入控制器的时候总是要经过自动验证。ASP.NET MVC团队已经在3.0的版本中开始着手解决这些问题了,我们会发现他们最后还是能解决的。MVC 2还缺少高效的模板引擎,这让前台的标签显得有些冗长。在3.0的版本中,他们即将使用Razor引擎来改善,Razor引擎是一种与Rails中的REB框架类似的模板引擎。

还有一个没有做好的地方是依赖注入。他们在工厂模式下面做的很好,可以允许开发者通过微软的框架选项来衔接,但不能在这个框架之外使用。让我有点烦恼的是,3.0的版本计划全部使用服务定位项目容器(Common Service Locator Project)来衔接依赖注入。从某些方面上看,这对那些经常抱怨它包含静态内联(内嵌)调用业务定位的人来说更是错上加错,业务定位代码往往是这样写的:

public void SomeMethod()
{
     Locator.Get<Service>().DoSomething();
}

从测试的角度来看,这代码太难看了。希望在Redmond的MVC团队可以听到大家不满的声音,并用更好的工厂模式来实现它。如果按照我自己的意愿,我觉得用Windsor Container作为默认的依赖注入框架应该不错…但我可不愿激起一场关于框架派别的斗争。(笑…)

InfoQ: ASP.NET MVC框架跟其它平台上你熟悉的一些MVC框架比较,您认为最主要的区别是什么?

Jonathan: 我认为,ASP.NET MVC与大多数框架比较而言,是一种更加纯粹的表现层框架。其它的web框架还会包含一些其它良莠不齐的东西。例如,你不能随便选择你要用的持久化框架——有时候,选用这些组件要遵从公司的政策。这对ASP.NET MVC的开发人员来说并不是问题,因为它并没有捆绑持久化框架。

另外一个不好的方面,就是新手面对MVC的时候需要挑选使用的组件。在本书的第三章对这个问题有详尽的解释,其中不仅为开发者演示了如何集成这些工具,还提供了第三方组件的集成方法。

InfoQ: 您觉得那些精通其它MVC框架的开发人员在ASP.NET MVC下能很快上手吗?

Jonathan: 我觉得没有问题 —— 我经常听到用其它语言/框架的开发人员老是抱怨不习惯用VS和C#的语法。不过,一旦你越过了这个门槛,你应该会发现这个过度相当平缓。不过,你买一本好书来越过这个坎,也未尝不可。(笑…)

InfoQ:ASP.NET MVC已经推出有几年了。在您的印象中,它在社区的采用率怎么样?

Jonathan: 哦,从数量方面来说,它还是在婴儿期 —— 我听说,大概有1百万左右的下载量。随着对ASP.NET WebForm市场占用率的提高,我想你会看到MVC使用率也会逐步提升。微软官方的立场是同时拥护WebForms和MVC两个框架。但是,我预言ASP.NET WebForms会慢慢衰退。

我看到ASP.NET MVC从开源MVC框架——像python的Django框架和Ruby的rails等——的市场中已经获得了一定的份额。这里有两层原因,首先比较重要的是微软等大公司的商业支持把它做得更加友好了。虽然使用Rails这样的框架的确可以快速开发,并且它对程序员很友好,但它并没有专门的公司为其提供支持。第二个原因在于框架本身的改变也具有演化性。从MVC 1.0到MVC 2.0的迁移就如Rail 1.0发展到Rails 2.0一样是一次飞跃。

InfoQ: 在ASP.NET 3 的第一个预览版本中,微软创建了新的表现层引擎Razor。您对这个引擎的印象如何?

Jonathan: 我非常喜欢它。我希望他们能做的更好,但在开始时就对它非常乐观。Razor表现层的代码就像…嗯,就像剃刀一样利索。并且,它还支持其它方面,像HTML辅助等,所以我不必回头寻找。
理想的情况下,我希望看到它能做到更好,最好是阻止开发人员编写像if/else这样多行的代码块。我的主张是,这些事情应该属于可测试的HTML辅助工具。不过我可以理解为何要包含这些代码块——实际应用中,这是为了满足页面展示的逻辑要求。我觉得展示页面最好不要掺杂逻辑代码,只是展示内容,这样我晚上也能安心睡觉,因为我的代码都是经过测试的。

InfoQ:在书中您也非常关注软件部署,并使用Migrator.NET(来自Ruby on Rail’s Migration的灵感)部署数据库结构的变更.你认为使用Migrator.NET与传统的SQL脚本比较,有哪些优点?

Jonathan:不错,我是很喜欢Rails的migrations,就个人而言,我一直不喜欢SQL。原因是:SQL要让人把它们想象成行和列,不是按照对象和交互的形式。所以,不管什么时候,我都能减少直接以“一行一行”的形式与数据库交互,我当然选择Migrator.NET了。

使用mgrator.NET你只要处理C#代码就够了。这还让升级和降级软件包更加方便。我也是dbDeploy.NET的粉丝——但是让我选择的话,我还是更加喜欢C#。呵呵!

InfoQ: 在最后几分钟,您还有什么好的建议给那些经验丰富的开发人员,让他们考虑使用ASP.NET MVC呢?

Jonathan: 如果转向ASP.Net MVC的TDD,你的开发模式会变得更加高效。如果你在ASP.NET MVC中不使用TDD,你就不会意识到这个新框架强大的优势。

我特别崇拜TDD的领袖Kent Benk,我觉得自己原本只是一名普通的开发人员。TDD还有其它极限编程实践,让我成为一名中级水平以上的开发人员。这种技术很容易学习,而且也是我写这本书的原因——让其他人更易于在MVC的开发中使用TDD。

InfoQ:谢谢您抽出宝贵时间接受我们的采访。

查看英文原文:Interview and Book Excerpt: Test-Drive ASP.NET MVC


感谢侯伯薇对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家加入到InfoQ中文站用户讨论组中与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT