4万字《腾讯云技术实践精选集 2021》发布,点击下载 了解详情
写点什么

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

  • 2010 年 11 月 08 日
  • 本文字数:3495 字

    阅读完需:约 11 分钟

今天,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 中文站用户讨论组中与我们的编辑和其他读者朋友交流。

2010 年 11 月 08 日 00:001615

评论

发布
暂无评论
发现更多内容

2021年中国DevOps现状调查报告发布!

华为云开发者社区

DevOps 敏捷 安全 华为云DevCloud 信通院

马拉松还是骇客松 Hackathon?

escray

学习 极客时间 朱赟的技术管理课 7月日更

2021年最新大厂Android面试笔试题目,威力加强版

欢喜学安卓

校友卡微信小程序开发总结

CC同学

网络 IO 服务器模型 Reactor 与 Proactor

赖猫

Linux reactor

Linux之free命令

入门小站

Linux

Python OpenCV 图像处理之 图像运算和图像位运算知识补充

梦想橡皮擦

7月日更

结对编程,到底是双剑合璧还是脚趾抠地?

华为云开发者社区

编程 软件 敏捷 敏捷开发 结对编程

不愧是阿里内部“SpringCloudAlibaba学习笔记”竟然在GitHub霸榜

Java 程序员 架构 微服务 计算机

在线诺基亚短信图片生成器工具

入门小站

工具

FIL云算力挖矿平台系统开发案例

Geek_23f0c3

云算力挖矿系统开发详解 云算力模式系统开发源码 filecoin矿机哪家好? fil挖矿

淘宝网 Java 千亿级并发系统架构设计笔记(全彩版小册开源)

Java 程序员 架构 并发编程 计算机

个性化联邦学习算法框架发布,赋能AI药物研发

华为云开发者社区

联邦学习 药物研发 算法框架

优先考虑 nameof

喵叔

7月日更

倒数1天

IT蜗壳-Tango

7月日更

Confluence 7 如何修改启动内存

HoneyMoose

带你看清梦饷集团如何成为上海在线新经济四小龙

华为云开发者社区

MySQL 数据库 mongodb 电商 华为云数据库

7月日更,FAIL!FAIL?

Nydia

云小课 | 一分钟了解AppCube中的应用

华为云开发者社区

低代码 云小课 应用 AppCube 应用魔方

架构训练营第 1 期 模块三作业

高远

发现了一个电子书仓库,分享给大家,值得收藏!

C语言与CPP编程

Java c++ Python C语言 数据结构与算法

Python开发篇——如何在Flask下编写JWT登录

DisonTangor

Python flask JWT

Building deep retrieval models

毛显新

自然语言处理 深度学习 tensorflow 推荐系统 keras

如何制定音视频编解码学习路线

hanaper

音视频 图像识别 图形处理 语言 & 开发

「SQL数据分析系列」12. 事务

数据与智能

sql 事务

网络攻防学习笔记 Day90

穿过生命散发芬芳

网络攻防 7月日更

2021腾讯Android面试题精选,复习指南

欢喜学安卓

android 程序员 面试 移动开发

Vue进阶(幺柒陆):CSS 预编译语言 Sass、Scss、Less 和 Stylus

No Silver Bullet

CSS less SASS scss 7月日更

一句话木马该怎么实现?现在就带你了解

网络安全学海

Java 网络安全 信息安全 渗透测试 漏洞分析

模块三-学生管理系统详细架构设计

kk

架构训练营

IM与办公平台的关系设计

superman

产品经理 架构师 IM 移动办公平台 自建移动办公

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