090723 T Code Generate 的思考
今天看了公司(易车)原来团队开发的部分项目的代码,发现很多项目是基于Typed DataSet或NetTiers的,两者都是代码生成器(Code Generator,以下简称CG),前者是VS自带的工具,而后者则是第三方开发,同样的还有CodeSmith、动软等。这些CG的输入/信息来源,大都是数据库中的元数据。
其实,我个人也开发过CG。
第一个是在上海外高桥实习时用于转换C语言到C#语言的转换器。
另一个则是配合hxy.LayersFramework框架的生成器,其输入主要来自于LINQTOSQL根据数据库元数据生成的源代码,输出则是该框架对应的实体类、管理类、数据访问层等。其生成的代码与一般的CG生成的代码的用途还有些区别:这些代码只在一开始时生成一遍,然后手工在上面定义新的内容。而上面的CG生成的代码一般不允许修改,也不能添加内容。因为一旦这样后,再生成时,会丢失这些更改。
所以,我并没有去开发一款适合大众使用的CG,如类似于Code Smith的。因为其实代码CG的作用是帮助开发人员编写重复而乏味的代码。而这类代码在各个应用程序下可能会各不相同。这时,很可能需要开发一个适应此情况的CG。
例如,我目前的开发模式习惯使用UML来对Model关系建模,然后使用C#语言编写接口定义具体的模型。大部分情况下,这些接口都会直接映射到数据表中去,这时,我需要的应该是这样一个CG:对应一个C#接口源代码或文件的输入,可能需要输出对应的表的创建语句sql、实现这个接口的类、类的管理器……等。
当然,是否需要开发这个CG,需要对成本及收益或效果进行估算。