代码改变世界

您选择简单的组合,还是完整的集成?(补充)

2009-10-28 10:03  Jeffrey Zhao  阅读(...)  评论(...编辑  收藏

昨晚就写到这里,刚看到有朋友提意见了,说我标题党,标题写着“文化”,里面变成PowerShell介绍了。其实如果我要介绍PowerShell就会更详细一些,而现在即使把所有的PowerShell脚本删了也还是有些内容的吧……不过现在还想多谈一些东西。例如,如果你要完成一件事情,那么会选择什么方式。我这里简单分为两种,一种是集成进常用的工具,如Visual Studio;另一种便是使用额外的工具——可以是Shell,也可以是别的。

在两年前的一个项目中,我做了一些现在看起来比较失败的选择,主要在于配置管理上,如项目的构建,自动部属,尤其是数据库Schema的版本控制上,使用了比较的复杂的做法。当时我使用VS DB Edition来做数据库Schema的版本控制,它很强,能够把目前的DML脚本进行汇总分析,在对照一个现成的数据库,生成一段迁移脚本。生成的脚本非常过瘾,包括保留数据所需要的导入导出语句一应俱全。这个功能令人叹为观止,自然满足我的需求。但是,使用的结果并不很理想。为什么呢?因为太慢。无论是汇总DML还是做对比分析,都需要比较长的时间。时间长对于“生产环境”还好说,因为“可靠”更重要一些,但是对于开发平台上,如果每个开发人员机器上进行不断的回溯,再部署,每次需要很长时间,那就难以令人接受了——当然这个速度慢的原因也有测试数据导入方式上的问题。同样,VS中的单元测试工具,不知道为什么也做的特别慢。是的,我承认它很强大,有详细的报表,精致的界面,和广告上看起来一样专业。但是如果每次执行单元测试时,95%的时间是消耗在测试环境准备上(毫不夸张),那如何能让人不断地执行单元测试呢?

我选择这些东西的原因,其实是看准它们一是强大,二是VS集成性好。但是,我真需要这么强大的功能吗?我真需要漂亮的集成性吗?我可以使用更适合项目的轻量级类库,我可以在VS里配置一个外部工具,只是把单元测试的结果输在Output窗口中,就都行了。因此,在新的项目里我选择使用Migrator.NET + SQLite作为数据库Schema及数据的控制(James Ying同学还挑出了一个bug),xUnit作为单元测试框架,以及TeamCity作持续集成,就现在看来,这些免费的组件也配合得相当好。而且,我也越来越有这种感觉,Visual Studio Express来作为开发工具也足够,而不需要Professional,Ultimate等版本——您真用了那些高级功能吗?

对于Visual Studio Express来说,我目前只想到一个问题:没法扩展,也就是说您是没法为它安装插件的。因此无论是Visual Studio Shell也好,MonoDevelop也罢,或者是SharpDevelop的兄弟们,加油吧。

我说这些东西,除了想说明我们可以使用VS外的工具辅助开发之外,也同样说明了,其实.NET平台下的开发工具或类库也都已经非常完整了。有人说,ASP.NET MVC功能太少比不上Rails。我说:那是,Rails不仅仅是个MVC框架,它是个“敏捷开发”套装,包含了数据库维护,系统构件等许多组件,而ASP.NET MVC也只是个MVC开发框架而已——咋比?但是,我们可以用其他框架进行补充啊,如使用psake代替rake,而它们的组合也没有问题——我们还有PowerShell这个强大的粘合剂。

如果把Rails作为一个“完整的集成”来看的话,ASP.NET MVC + Migrator.NET + psake + PowerShell……这不也是“简单的组合”吗?