zoukankan      html  css  js  c++  java
  • 我的.Net武器库

    工欲善其事,必先利其器。

    N多年前微软官网曾发了.Net下必备的十种工具,N多年过去了,世异时移,很多东西都已经变化了,那个列表也似乎陈旧了。而且,该文也只是对十种工具独立的介绍,显得有些罗列的感觉,是不是每个工具都是同等重要,工具与工具之间是否有联系?等等,阐述得并不明确。

    这里,我想从另一个角崖,重新归纳一个更新的更实际的武器库。更新,是因为有很多最近几年才出来的工具/框架库,更实际,是因为我自己的项目就完全依赖使用。

    Visual Studio

    这个似乎是不言而喻的,只是从严谨的角度,也列在这。实际上,现在也有一个开源的IDE开发环境发展也不错,叫SharpDevelop。我并没有仔细看,不敢妄评。而我因要用到之后会讲的Resharper,也迫使我只能用VS。

    Resharper

    无论是从其名称,还是实际功能,Resharper绝对称得上利器,一旦你用熟了你就再也离不开它了。我去年换工作,很大一部分原因就是因为原单位不让我使用Resharper。几个面试,我也总在重复提出我这一要求。直至最新版本6.1为止,Resharper已经是个多面手。早期,它还只是个重构的工具,如今它是反编译器(原来的Reflector.Net就用不上了),还是个代码审查工具(代码规范审查),还是代码生成器(Code Smith又用不上了),最后,它对键盘快捷键的组织使用,对无鼠标操作极其有益。一句话,Resharper能极大提高编码的效率,利器更是重器。

    Fluent nHibernate

    这件武器其实分为两部分,一个是Fluent,一个是nHibernate (这不是废话)。nHibernate知道了解的人很多,就是一个ORM工具,而加上Fluent之后就知之甚少了。从功能上,Fluent只是在原来ORM工具基础加上一层封装,以Fluent Interface形式提供了使用nHibernate的API。可是别小看这一层封装,从使用体验和效率提高方面,Fluent nHibernate有着卓越的功效。就我个人经历,就是在Fluent nHibernate之后,才真正使用,喜爱上nHibernate本身。让大多数人比较头疼的创建映射XML文化,被全部C#文件代替,甚至可以完全省略。可以说这两部分是一个完美的结合,后者提供强大的基础功能,前者提供完美的使用接口。这不是一个成功软件必须的两个要素吗?什么是ORM,不会吧,放狗搜搜就知道了。我只想强调的是,不要把它仅仅看作一个功能库,它更是个架构设计的利器。从架构的角度,它把业务域和数据层隔离,使得数据模型和业务域模型独立设计成为可能。这一点的影响是非常深远的。

    nUnit + Machine Specification + Rhino Mock + AutoMocking

    啊呀,不得啦。上一武器,我一下子介绍俩,这一次白送四个。这也体现我写本文的指导思想,从开发使用的角度来叙述而不是从工具提供者来还分。这四个套件在一起实在是太完美了!nUnit又是一个众所周知的测试框架,它提供了测试的基础功能和概念。MSpec从BDD的角度,封装了一下nUnit,也可以说是重构了一下语法,使测试可具有可读性,提供良好的测试组织结构,进而可以测试完了,直接生成一个完美的测试结果文档。Rhino Mock也是一个熟客了,但是旧中有新,新的几个版本也加入了一些可圈可点的新性能,如所谓AAA语法(Arrange, Action, Assert 这与MSpec的 Establish, Because, It关键词完全契合)。而从我的角度,看到的亮点仍然是可读性的改进。最后,AutoMock的出现又让事情更加简单了,连创建Mock对象的语句都省掉,只要你把依赖类的接口,在被测试的类的构造器中声明传入,AutoMock就自动为你创建Mock对象就,如同它的名字所表达的一样自动Mock。当然,还有高级应用,暂不赘叙。

    SQLite

    什么,数据库也算?是的,不过这里SQLite不是我的产品数据库,而是用它的内存数据库做集成测试的工作,可以说是集成测试的利器。I\O读写历来是性能的瓶颈,而敏捷编程对测试的高度依赖,也是对测试性能的高度要求。即使是高度覆盖率的单元测试也仍然不够,我们依然希望能在持续构建(CI)中,每次能自动运行集成测试。而如果要有真正独立、干净的集成/用例测试,最好是每个测试用例完全重建数据库,重置测试数据,这样的要求,只有内存数据才能得到良好的性能。使用SQLite证的内存库后,不光集或服务器可以轻快的完成集成测试。开发人员本地,也把集成测试很快的运行完。这样,我们的敏捷流程中不仅包括单位测试必须通过,甚至也包括了集成测试。它的名字叫用户故事。

    不过这个工具有个小小的问题,因为SQLite是基于C开发的,针对32位和64位系统,它分别发布了两套控件,所以你必须根据自己的平台,3引用不同的Dll文件。而且,VS项目编译设置还必须明确指明是x86还是x64,不能设为Any CPU。就为这个由题,我很是头疼了几天,最后才找到这个解决方安案。使用上,由于前面使用了Fluent nHibernate,除了配置,不用对代码做任何改动。如果要改改了,也就不是真正的集成测试了,不是吗?

    Git

    如果你能一天就把代码写完,你就不需要源代码管理,你能吗?做为一个源代码管理的新秀, Git的发展是极其迅猛的。我看好它,是它优秀的底层设计,优秀的业务模型. 如果要了解什么是DDD,Git是一个非常好的典范。一般的源代码管理,都是基于单个文件的版本控制,而Git一开始设计就是基于每个提交(代码文件树)来追溯版本。你可能会不赞同我的说法,因为,很多代码控制仍然提供了项目级的分支或者版本,其实那只是一个假像。VSS,SVN,TFS的最底层,都先是文件版本控制,在这个基础之上,再提供项目版本的功能。而Gif却恰恰相反。这个很重要吗?是的,区别非常之大。引用DDD的思维,即然,从用户的角度,代码控制版本是基于文件树的,为什么你的业务模型却不是呢?所以,我把耙VSS,SVN等的这种实现方式,看作打补丁/修补方式,总有一天,补了摞补了,至于最后,再也不能修补了。还有一点Git是分布式代码管理库。

    TeamCity

    嘘(抹汗),总算到讲到最后一个,已经写得太长太多了,写者累,看者烦。从CI工具的鼻祖CCNet升级到TeamCity之后,感觉确实不一样,鸟枪换炮。为什么要CI,好像不是我这一篇短文可以讨论清楚的。

    TC的好处,第一:是商业软件并且免费,一般这两点很难同时出现。当然有个限制,如果你只使一个编译代理服务的话,这个对我来说已经足够。第二:它对很多三方工具支持做得很好。如, nUnit, MSpec,Git等。最重要的是它是CI服务器!

    好了,这就是目前我的兵器,已经足够了,让开发的流程顺畅,让你新的想法得以实现。敏捷在哪里,就在这些工具里。是否对你有用,欢迎点评,反馈。仍然还在看一些其它的工具,希望在真正使用获益之后,再为这个推荐列表添加更多成员。

    摘要: 因为前期,重点放在业务分析上,这两块一直认真思考过,觉得很简单.一开始只是找了一个nHibernate的示例, 就决定把Session的Open和Close和事务(Transaction)的Commit, 放在HttpModule中处理. 算是Session per Request的模式.之后,继续加入错误处理的PlugIn, 做了一个HttpHandler的Decorater, 在所有其他HttpHandler的最外层. (我使用的是自己实现的FrontController来处理页面). 这样一来, 任何页面处理中,没有被截获的错误都回被最后一道防线网住.可是, 等等, Transactio阅读全文
    posted @ 2010-07-15 05:16 予沁安 阅读(34) | 评论 (0) 编辑
    摘要: 近期在做一个Web的项目. 即不用WebForm也不用MVC, 走了第三条路,做自己的一个框架用FrontControll.可是,HTML模版这一块太大,仍然使用Asp.net的解析. 使用aspx文件做模版. 开始,使用Server.Transfer来装载模版文件( 类似Server.Transfer("my template.aspx") ).一切都没有问题, 效果很好, 速度也快, 过程中我也反过来看了Asp.netWeb Page类实现, 太重了, 那可能是很多Web应用比较慢的原因.可是,当我开始实现统一的错误处理时, 却碰到个意想不到的问题: 每个页面每次都报错阅读全文
    posted @ 2010-07-14 00:49 予沁安 阅读(30) | 评论 (0) 编辑
    摘要: 时间的尺度:小时(1~2小时),天(0.5~3天), 星期(1~2星期), 月(1~3月),年.仅仅使用以上的时间尺度来衡量任务. 比如, 说1个任务需要量10个小时是没有意义的, 要折算成天,如2天.同样,说这个用户故事要20天完成,不如说要1个月. 尺度的恰当使用,会对项目管理很有帮助. 组织好开发的节奏.任务的粒度: 目前为止,在我的实际应用当中, 开发人员个人的工作过程中最基本的任务单位以1小时为宜, 这也是上面最小的时间尺度.这不一定是项目分配任务, 多数情况应该是开发人员的分解任务.这个粒度的好处在于, 每一个小时, 你能有机会喘口气. 另外,任务还有一个完成标志的定义, 另文再叙阅读全文
    posted @ 2010-07-08 00:03 予沁安 阅读(21) | 评论 (0) 编辑
    摘要: 在心理学上有个有名的故事,就是一只大象,在它小时候被一根细细的绳拴在一根小小的桩上,只是它那时没有力气挣断,于是它试了又试,最终不得不放弃。等它成年后,仍然一个小小的桩、一根细细的绳就能缚住它,它已习惯不再挣扎阅读全文
    posted @ 2010-07-01 00:16 予沁安 阅读(15) | 评论 (0) 编辑
    摘要: SCRUM是项目(公司)的层面.Agile是软件开发流程(的层面).Pattern是技术层面. Pattern只是一个有代表性的词而已, 其实涵盖更多与技术有关的东西.比如光是Pattern就有Design Pattern, Architect Pattern. 其他技术性的东西: 面向接口编程, 合同编程(Design by Contract), DDD(Domain Driven Development), TDD(Test Driven Development),阅读全文
    posted @ 2010-07-01 00:09 予沁安 阅读(18) | 评论 (0) 编辑
  • 相关阅读:
    sqlhelper使用指南
    大三学长带我学习JAVA。作业1. 第1讲.Java.SE入门、JDK的下载与安装、第一个Java程序、Java程序的编译与执行 大三学长带我学习JAVA。作业1.
    pku1201 Intervals
    hdu 1364 king
    pku 3268 Silver Cow Party
    pku 3169 Layout
    hdu 2680 Choose the best route
    hdu 2983
    pku 1716 Integer Intervals
    pku 2387 Til the Cows Come Home
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2432316.html
Copyright © 2011-2022 走看看