疯狂代码生成器
基于多种开发语言多种数据库代码生成器
作者:梁孙祥
【摘 要】:对于数据库开发,无论基于.net、Asp、Php、Java、Dephi等何种开发语言或开发工具,为了实现项目开发效率高、代码可读性强以及编写代码风格统一,同时也为了减轻程序员的工作量。决定开发基于模板化多种语言多种数据库的自动代码生成器方案,对数据库操作常用模块实现了根据模板自动生成代码。只要数据库备注说明比较规范,自动生成的代码基本不需求修改,就可以快速完成所有表的基础类库以及编辑查询界面。本文介绍了代码生成器的系统模型和相关技术,对自动获取技术,模板和标签替换技术以及XML存储文件做了详细说明。软件同时支持四种常用数据库Access、Oracle、SQL-Server和MySQL。
【关键词】:DotNet 、代码生成器 、模板标签 、XML、Rss、数据库
1.背景
微软综合了诸多技术,推出了.net这个跨语言、跨平台的技术规范,.net 最核心的部分是处于.net Framework底层的通用语言运行时(CLR),它是多种语言的统一运行环境,为这些语言提供内存管理、例外处理、安全性、版本控制、组件通信等系统服务。
Microsoft Visual Studio .NET 提供了很好的 asp.net 开发环境,从而引起网络中出现各种各样基于.net代码生成器。但对于程序员,仅局限于.net代码生成器,无法满足开发需要,且无论基于 C/S 还是 B/S结构,选择了何种语言及开发工具,基于数据库开发,比较多的是对数据库字段操作,如查询显示、添加、修改、删除等,基本属于重复编写,而且容易出错,代码风格不容易规范。而项目不同,设计的风格也存在差异,从而考虑模板化的代码生成器。模板化是从项目整体布局考虑,就以Web开发分析,模板就是Header、Body、Footer三大部分组成,Header和Footer代码基本固定,对于不同模块代码改变是Body主体内容。对于数据库开发Body内容来自不同表而已,习惯性开发就是Copy、Paste,更改Body内容,就可以完成新的模块。为了减少程序员重复工作,唯一办法就是采取代码生成器,快捷、方便、灵活、代码命名规范、结构清晰易于维护及扩展,达到事半功倍效果。
本文给出了作者开发的代码生成器的模型及系统结构,并以本网站源码为实例就相关算法及技术进行讨论。
2.系统模型
![](http://localhost:88/images/moxing.gif)
3.程序流程和相关技术
疯狂代码生成器是一款为程序员开发的代码自动生成工具,生成代码规范,使用XML文件存储数据库链接及模板文件等用户的操作信息,便于项目的修改和复用。为了普遍性,同时对四种常用数据库Access、Oracle、SQL-Server和MySQL进行了特别的支持。疯狂代码生成器根据用户指定的数据库,自动获取相关的信息,例如字段,类型,主键,描述等,用户可以手工对这些信息进行修改,可以选择和删除需要显示或者处理的字段,也可以控制最终页面中各字段的显示顺序和处理效果,也可以按固定格式输入自定义变量如变量+描述类似来源数据库数据,接下来自动代码生成器根据选择文件类型来替换指定标签对模板文件进行替换,自动生成所需要的必要代码,包括显示、添加、修改、删除等,并根据开发语言且遵循开发工具所生成表示层和业务层分离的规范,生成对应的文件。对于自动生成的文件用户可以直接添加引用到项目中使用,也可以在原有基础上进行再次开发。
3.1数据库字典的自动获取
在此以Access数据库为实例讲解部分关键代码。
1.列出当前所选择数据库所有用户表:
DataTable table = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[] {null, null, null, "TABLE"});
2.列出当前所选择数据库所有用户视图:
DataTable view = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Views,null)
3.列出某张数据表的主要字段(序号、列名、类型、长度、描述、允许空等):
DataTable _table = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,new object[] {null, null, 所选表名.Trim(),null});
用以上代码可以自动获取所选数据库字典的相关信息,例如可以自动获取字段的描述信息,直接用于生成页面的表格HeaderText栏或WinForm中的Label文本栏,用户也可以在自动代码生成器上手工修改各种信息。
3.2针对字段的不同类型的处理
在实现数据库添加和修改功能时,相同字段类型,不同数据库,输入格式也不一样,如数字型或日期型等等,在不同数据库中输入格式也不一样,为此抽取几种比较常用类型进行特别转换。还有不同字段在表示层中显示控件也不一样,有些字段用文本框,有些字段用下拉框或单选框或日期控件等等为此考虑到不同语言不同开发工具,可根据字段类型结合长度自动筛选通用控件或使用自定义界面订制选择控件,代码生成器将根据用户设置条件自动生成全部代码。
3.3模板文件和标签替换技术
自动代码生成器从前几步获取了必要信息之后,使用标签替换技术对模板文件中的标签进行替换,生成可用代码。
由于.net 代码具有一定框架性,例如信息显示分成 aspx 页面表示层和 cs 代码业务层,由业务层与数据库进行交互操作。由于框架具有一定的通用性,将框架的通用代码抽取成模板文件,对其中需要替换的部分使用标签进行标记,在生成代码时对模板中的标签用对应的具体信息进行替换,最终生成完整的代码。
(一)在对替换过程进行了简单的说明,在实际设计时,主要包括三个方面:
1.模板文件的抽取。首先考虑开发语言,其次考虑开发工具,主要是Dephi和DotNet,再深入分析开发结构是B/S还是C/S。例如选择DotNet开发工具和C#开发语言 ,(1)对Web开发,框架生成文件主要是 .aspx 及 .cs 两种类型;(2)对WinForm开发,生成文件主要有 .resx 和 .cs 但 .resx 文件添加引入后,系统自动生成,不需考虑;最后步骤对典型的实际应用程序进行分层剥离,抽取出其中具有代表性的通用代码框架。
2. 标签设计。标签的设计非常关键并且种类较多,主要从典型系统中总结出来,通过生成文件类型角度定义标签,目前主要分为Model,Dal,IDal,DalFactory,Bll、List、Edit、Save、Delete、Other等等。
3.标签替换。自动代码生成器的主要工作就是利用从用户和数据库获取的信息,经过预处理,生成实际的信息对相应的标签进行替换。标签替换根据用户自己设计模板,自由组合标签,对各层替换时先局部后全局,先简单后复合,保证替换的正确性。
(二)模板和标签替换方式的优点:
1.层次清晰。最终代码的层次源自模板代码,清晰的模板层次保证了最终代码的分层原则。
2.可理解性。模板文件是独立的文件,用户可以方便的阅读模板文件,便于理解。
3.可修改性。这也是模板文件最大的优点。用户在理解模板的基础上可以对模板进行修改,并会在生成的项目代码中立即体现出来。如果把模板文件固化在自动代码生成器中则用户无法修改模板,虽然在编写自动代码生成器时会简单但将失去灵活性,所以我们选择了外挂模板文件的处理方式。
4.可替换性。模板除了可以局部修改之外,也可以整套替换。可以提供多套模板由用户选择。
5.通用性。模板是在多种实际需求基础上抽取出来的,具有较大的通用性,无需修改即可适应大多数项目,对于比较特殊的需求可以在最终代码基础上进行修改。
6.一致性。由于所有生成的代码都是在由模板产生的,代码在页面层和业务层的风格上具有严格的一致性,类似于工厂化生成。对格局的修改可以通过对模板修改完成。
4.系统介绍
4.1系统特点
疯狂代码生成器是一款为程序员开发的代码生成器软件,是一种辅助工具,相信绝对可以成为程序员信赖伴侣。因为使用疯狂代码生成器软件,程序员今后就不再为WinForm开发中,对许许多多的Label、textBox、DataGrid的GridColumnStyles等常用控件重命名或赋值的繁琐而巨大的工作量而烦恼,也不会为Web开发中对许许多多Table填写内容而担忧,通过代码生成器设计项目,快捷、方便、灵活、命名规范、结构清晰易于维护及扩展,几分钟就可搭建整个项目基本框架模型。虽然功能没有那么强大,但绝对比较实用。一些与代码生成无关辅助功能,以后将不断添加。疯狂代码生成器软件设计都是针对所有程序员所需常用代码生成及规范化考虑。因为本人从事编写代码多年,了解点皮毛,积累点经验,所以编写这个软件与大家分享。有不足之处或好意见与建议,欢迎来Email或在线沟通Msn:e_camel@hotmail.com。
4.2系统主要功能
(一)系统管理:
1.数据库链接。选择数据库类型,加密后以保存数据库链接字符串,防止恶意链接。
2.系统选项。设置系统升级、错误信息反馈等相关选项。
(二)管理工具:
1.数据库管理器。显示整个数据库字典,便于查询。同时可对数据进行查询、修改、删除操作。
2.生成数据库文档。具有选择性生成Word或Excel文档。
(三)代码生成:
1.模板设置。主要定义项目名称及维护人,默认就是系统用户名及维护模板文件及代码保存路径。
2.代码生成。根据模板文件对单表所有字段生成相应代码,或输入自定义变量生成相应代码。用户可根据实际情况修改后再保存。
3.自动生成。根据模板文件对整个数据库或所选表自动输出所有文件保存到指定目录下。
(四)系统帮助:
1.在线升级。根据系统设置选项,在线检测最新版本提供在线升级。
2.反馈信息。系统出现任何异常错误信息,自动保存到日记表,用户可定时自动发送反馈到服务器,便于系统不断完善,更好服务于大家。
本软件即将发布测试版,敬请关注www.DevHelper.cn