Hello World
Spiga

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

2009-10-28 10:03 by 老赵, 17003 visits

昨晚就写到这里,刚看到有朋友提意见了,说我标题党,标题写着“文化”,里面变成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……这不也是“简单的组合”吗?

Creative Commons License

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名赵劼(包含链接),具体操作方式可参考此处。如您有任何疑问或者授权方面的协商,请给我留言

Add your comment

32 条回复

  1. 3333334[未注册用户]
    *.*.*.*
    链接

    3333334[未注册用户] 2009-10-28 10:17:00

    整天说些废话

  2. 老赵
    admin
    链接

    老赵 2009-10-28 10:20:00

    @3333334
    说废话多爽,你不也在说嘛,嘿嘿。

  3. ryrs[未注册用户]
    *.*.*.*
    链接

    ryrs[未注册用户] 2009-10-28 10:24:00

    @3333334
    其实我很鄙视你··但是我什么都不说

  4. llj098
    *.*.*.*
    链接

    llj098 2009-10-28 10:28:00

    多介绍介绍开源,轻型的库吧

  5. snow man
    *.*.*.*
    链接

    snow man 2009-10-28 10:36:00

    我在学校学的linux 出来用的windows
    感觉还属windows更好一点,
    包括资源,帮助文档啥的,最重要的是简单

  6. Ivony...
    *.*.*.*
    链接

    Ivony... 2009-10-28 10:50:00

    对于写个程序而言,VS Express真的是绝对够了。现在的Express套装也很丰富,除了VS Express,还有SQL Server Express、MSDN Library Express,都装上啥都能开发了。

    要玩大项目,Professional也是够用了,那些Ultimate和Team System提供的功能看起来是很爽,但实际上用的最多的还是IntelliSence。

    升级VS2008 SP1的主要动机是JavaScript的IntelliSence。

  7. Jerry Chou
    *.*.*.*
    链接

    Jerry Chou 2009-10-28 10:50:00

    较重的框架,有时用起来很爽,有时很沮丧。

    对于有一定实践经验的程序员来说,都会不自然地喜欢上简单地组合。

  8. 3333334[未注册用户]
    *.*.*.*
    链接

    3333334[未注册用户] 2009-10-28 11:04:00

    ryrs:
    @3333334
    其实我很鄙视你··但是我什么都不说


    迷信的粉丝

  9. 老赵
    admin
    链接

    老赵 2009-10-28 11:04:00

    @Ivony...
    VS Express对大项目有什么限制吗?
    说实话我对VS就用个编辑器,带智能提示的,还有各快捷键。
    VS Express什么都有。

  10. Ivony...
    *.*.*.*
    链接

    Ivony... 2009-10-28 11:05:00

    Jerry Chou:
    较重的框架,有时用起来很爽,有时很沮丧。

    对于有一定实践经验的程序员来说,都会不自然地喜欢上简单地组合。




    一个好的框架就应该是把简单的功能打包在一起。

    VS就很不错,你不喜欢它的单元测试,可以无视,用别的。除了不能单独卸载,我觉得这样已经很好了。

  11. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-10-28 11:29:00

    @3333334
    多好的沙发,浪费了

  12. Rexzhou[未注册用户]
    *.*.*.*
    链接

    Rexzhou[未注册用户] 2009-10-28 12:04:00

    比较看好VS Shell。SharpDevelop的代码编辑器太慢了,其实VS最关键的是在C#和VB上的强大的自动提示。

  13. Jerry Chou
    *.*.*.*
    链接

    Jerry Chou 2009-10-28 12:27:00

    Ivony...:

    Jerry Chou:
    较重的框架,有时用起来很爽,有时很沮丧。

    对于有一定实践经验的程序员来说,都会不自然地喜欢上简单地组合。




    一个好的框架就应该是把简单的功能打包在一起。

    VS就很不错,你不喜欢它的单元测试,可以无视,用别的。除了不能单独卸载,我觉得这样已经很好了。



    框架的学习成本(包扎Debug)是需要考虑的。
    还有就是框架知识的粒度太大,复用性不到单一的工具来的轻快和有效。

  14. die ba[未注册用户]
    *.*.*.*
    链接

    die ba[未注册用户] 2009-10-28 12:30:00

    哈哈,整天说这些确实没有什么意思。

  15. winter-cn
    *.*.*.*
    链接

    winter-cn 2009-10-28 12:58:00

    @die ba
    这位哥 您不知道这地方是显IP的么 - -!

  16. 老赵
    admin
    链接

    老赵 2009-10-28 13:08:00

    @winter-cn
    匿名用户看不到IP,可以理解的……

  17. 老赵
    admin
    链接

    老赵 2009-10-28 13:10:00

    Rexzhou:比较看好VS Shell。SharpDevelop的代码编辑器太慢了,其实VS最关键的是在C#和VB上的强大的自动提示。


    VS Shell好像许久没有声音了。

  18. Jerry Qian
    *.*.*.*
    链接

    Jerry Qian 2009-10-28 13:12:00

    关于Migrator.Net我想问个问题啊.
    现在项目中也遇到开发库经常是开发人员随便改,以前是记录下更改的东西,再在生产库上用ssms执行一遍,后来似乎学聪明了一点,把更改都做成了Sql语句,在数据库上一执行就好了.

    大概看了一下Migrator.Net,有些问题,每次修改数据库是先写Migrator还是先在开发库中改,然后生成语句,在Migrator中执行.还是只要改库就写Migrator然后在开发和生产库中执行呢.

  19. Jerry Qian
    *.*.*.*
    链接

    Jerry Qian 2009-10-28 13:20:00

    看来老赵工作去了,失落....

  20. winter-cn
    *.*.*.*
    链接

    winter-cn 2009-10-28 13:48:00

    @Jeffrey Zhao
    原来如此......

  21. dark
    *.*.*.*
    链接

    dark 2009-10-28 13:49:00

    学到一些东西~~ 感觉 好东西都是E文的

  22. 假正经哥哥
    *.*.*.*
    链接

    假正经哥哥 2009-10-28 14:34:00

    用Migrator.NET + SQLite作为数据库Schema及数据的控制 有文介绍吗?

  23. 老赵
    admin
    链接

    老赵 2009-10-28 15:05:00

    Jerry Chou:
    框架的学习成本(包扎Debug)是需要考虑的。
    还有就是框架知识的粒度太大,复用性不到单一的工具来的轻快和有效。


    框架的知识粒度不一定大,例如用VS不一定要了解Unit Test怎么用,呵呵。
    单一的工具的确容易复用,但是组装和学习也是要成本的。
    所以肯定还是需要两者结合的,没法说谁一定比谁好。

  24. 老赵
    admin
    链接

    老赵 2009-10-28 15:06:00

    Jerry Qian:
    大概看了一下Migrator.Net,有些问题,每次修改数据库是先写Migrator还是先在开发库中改,然后生成语句,在Migrator中执行.还是只要改库就写Migrator然后在开发和生产库中执行呢.


    写Migration,然后apply到数据上。其实Migrator的作用只是……把C#代码变成SQL而已,呵呵。

  25. 老赵
    admin
    链接

    老赵 2009-10-28 15:07:00

    @假正经哥哥
    Migrator.NET和SQLite这两个没有必要捆绑在一起的。

  26. Jerry Qian
    *.*.*.*
    链接

    Jerry Qian 2009-10-28 16:16:00

    Jeffrey Zhao:

    Jerry Qian:
    大概看了一下Migrator.Net,有些问题,每次修改数据库是先写Migrator还是先在开发库中改,然后生成语句,在Migrator中执行.还是只要改库就写Migrator然后在开发和生产库中执行呢.


    写Migration,然后apply到数据上。其实Migrator的作用只是……把C#代码变成SQL而已,呵呵。


    那还不如Sql来得快啊.难道就是为了跨不同的数据库吗.

  27. 老赵
    admin
    链接

    老赵 2009-10-28 16:27:00

    @Jerry Qian
    如果熟悉SQL的话,那肯定是SQL快了。
    但关键就是,大部分人SQL不熟悉,写起来麻烦。
    例如,添加一个字段,要求索引,外键。
    或者说删除字段,改表名,字段名等等。
    用C#的话,配合智能提示的话,一切都是非常直观的,也很快。

  28. 333333334[未注册用户]
    *.*.*.*
    链接

    333333334[未注册用户] 2009-10-28 16:57:00

    哈哈哈,都穿马甲

  29. vczh[未注册用户]
    *.*.*.*
    链接

    vczh[未注册用户] 2009-10-28 20:48:00

    @Jeffrey Zhao
    偷偷告诉你,VSShell总是与VisualStudio的版本更新同步……

  30. 老赵
    admin
    链接

    老赵 2009-10-28 20:50:00

    @vczh
    但是光有shell……意义不大吧,里面的东西发展的怎么样了啊?

  31. 緗灵
    *.*.*.*
    链接

    緗灵 2009-10-28 21:07:00

    @ryrs
    你不说是你的事,何必将你的意志强加在别人头上。

  32. xiao_p
    *.*.*.*
    链接

    xiao_p 2009-10-29 12:32:00

    @Jeffrey Zhao
    老赵,能不能来点关于开发环境和项目方面的介绍?

    比如 每日构建,持续集成,版本控制之类的。

    毕竟对于项目来说,这些东西可能更重要,就我目前的经验来看,大多数的团队就一个source control,其它方面都很欠缺。

发表回复

登录 / 登录并记住我 ,登陆后便可删除或修改已发表的评论 (请注意保留评论内容)

昵称:(必填)

邮箱:(必填,仅用于Gavatar

主页:(可选)

评论内容(大于5个字符):

  1. Your Name yyyy-MM-dd HH:mm:ss

使用Live Messenger联系我