刚毕业时找到一个做企业项目的公司,后来转型作外包,于是自己被外包出去到别的公司写程序,工作是把用c++开发的程序(桌面段程序)移植到c#上,一个team 80多个人,计划周期1年多,我在里面做了一个小组的实际的leader,不过那时候干的并不开心,我很快辞职了,进入了毕业前兼职的公司。之后的时间,我所参与的都是web项目,web开发经验也就从这里积累、增长。在入职后不久,我看公司里面所有的人开发数据访问层的时都自己写很多ado.net代码,非常的繁琐,那时候部分还是采用了微软的Application Data Block。但是那时候流行ORM组件,特别是java里面的hibernate,如日中天,而在.net里也出现了nhibernate。我特意去了解了一下hibernate,遗憾的是一开始就被它繁琐的配置文件给吓倒了,于是有了自己写一个ORM库的想法。有了想法就开始做,业余时间我自己从设计到开发,大约1个月时间完成了基本的雏形,完成所有的测试后,我编写了一些简单的介绍和入门sample发给项目组的其他成员,但是大家对这个都并没有实质的兴趣。直到公司开始做另外一个项目,开发快要结束时,客户方指出,我们的代码根本不是面向对象的开发,很多数据实体都采用hashtable的结构来传送,要求我们重新开发整个系统。而在我的极力推荐下,再次开发中采用了我设计的那个ORM组件,在项目期间我完善了很多特性以及大量的细节,并且最终保持了这个库的简单易用,同时一个同事帮忙编写了一个代码生成工具(生成实体类),开发进展的很顺利,很快项目就开发完了。一直到后面我参与的好几个项目里面都采用了那个ORM组件。做这个东西给我一点感受就是:作基础的组件对人技术的要求远高于做应用系统。在基础组件里面,对待接口和代码的稳定性绝对不能有一点疏忽,为每一个公开接口编写一个测试用例是一个明智的选择。