摘 要: 在开发asp.net + 数据库软件时,为了实现快速开发并减轻程序员的工作量,我们提出了开发基于 .net 的自动代码机方案,对asp.net + 数据库软件的部分通用化模块实现了代码自动生成。本文介绍了自动代码机的系统模型和相关技术,对自动获取技术,模板和标签替换技术以及XML存储文件做了详细说明。软件实现了预期功能,并具有一定灵活性和可扩充性,取得了令人满意的效果。
关键词:.net , 自动代码机 ,模板标签 , XML存储
微软综合了诸多技术,推出了.net这个跨语言、跨平台的技术规范,.net最核心的部分是处于.net Framework底层的通用语言运行时(CLR),它是20多种语言的统一运行环境,为这些语言提供内存管理、例外处理、安全性、版本控制、组件通信等系统服务。特别是 asp.net,由于其强大的功能,优越的性能和方便的部署等特点,正在成为越来越多的软件开发人员的首选。
Microsoft Visual Studio .NET 虽然提供了很好的 asp.net 开发环境,但是在开发asp.net + 数据库软件的时候,比较多的是对数据库字段操作,如显示、添加、修改、删除等,基本属于重复编写,而且容易出错。为了实现快速开发并减轻程序员的工作量,我们提出了开发基于 .net 的自动代码机方案,对asp.net + 数据库软件的部分通用化模块实现了代码自动生成,并具有一定灵活性和可扩充性,取得了令人满意的效果。
本文给出了作者开发的自动代码机的模型及系统结构,并就相关算法及技术进行讨论。
数据库 自动代码机 XML文件存储 模板 文件 替换标签 最终 项目 Asp.net 和C#代码
图1 系统模型
自动代码机是用C# 开发的一个应用程序,用XML文件存储用户的操作信息,便于项目的修改和复用。由于我们的软件项目大多采用SQL SERVER数据库,我们对SQL SERVER数据库进行了特别的支持。自动代码机根据用户指定的数据库,自动获取相关的信息,例如字段,类型,主键,描述等,用户可以手工对这些信息进行修改,可以选择和删除需要显示或者处理的字段,也可以控制最终页面中各字段的显示顺序和处理效果,接下来自动代码机用标签替换技术对模板文件进行替换,自动生成数据库操作的必要代码,包括显示、添加、修改、删除等,并遵循 asp.net 表示层和业务层分离的规范,生成对应的 .aspx 文件和 .cs 文件。对于自动生成的文件用户可以直接在项目中使用,也可以在原有基础上进行再次开发。
在此我们给出SQL SERVER数据库操作的部分关键代码。
1.列出当前服务器上的所有数据库:
select name from master..sysdatabases order by name
2.列出当前数据库中的所有用户数据表:
select name from (当前数据库)..sysobjects where type = 'U' and name not like '%properties' order by name
3.列出某张数据表的所有字段:
String.Format ("select {0}..syscolumns.* from {0}..syscolumns ,{0}..sysobjects where {0}..sysobjects.name='{1}' and {0}..syscolumns.id={0}..sysobjects.id order by colorder ",当前数据库 ,当前数据表 )
4.列出某张数据表的主键:
String.Format ("select * from {0}..{1} ",当前数据库 ,当前数据表)
5.列出某数据表字段的详细信息:
string.format("select * from {0}.information_schema.columns as col,{0}..sysobjects as obj,{0}..sysproperties as pro where table_name='{1}' and col.table_name=obj.name and pro.id= obj.id and pro.smallid=col.ordinal_position and column_name='{2}'",当前数据库 ,当前数据表,当前数据表字段)
用以上代码可以自动获取数据库、数据表和字段的相关信息,例如可以自动获取字段的描述信息,直接用于生成页面的表格HeaderText栏,用户也可以在自动代码机上手工修改各种信息。
在实现数据库添加和修改功能时,不同字段会有不同的需求,例如:有的要求空格待输入,有的要自动生成流水号,有的要用打勾(是非值),有的要用SQL语句从其他数据表来产生下拉列表等等。如果只能实现一般的空格待输入,则遇到不同需求时不得不手工进行附加处理。为此我们抽取归纳了使用频率最高的几种数据字段需求,作为一组功能模块,使用者只需选取所需功能并提供必要信息,代码机将自动生成全部代码。
下面对部分需求进行说明:
1.空格待输入:这是最常用的方式,需要判断字段的类型,防止用户错误输入。在有上下限要求时,也可以自动生成相关判断代码。
2.自动生成流水号:这是主键的常用方式,用户不需输入,系统自动生成。
3.打勾(是非值):这是布尔值或0 ,1数值型常用的处理方式,最终产生的代码将用CheckBox来接收用户的输入。
4.下拉SQL列表:用SQL语句从其他数据表来产生下拉列表。在实际项目中这也是很常见的需求,如果程序员从头写代码还是要颇费一番力气,涉及下拉列表的产生、选择、修改时自动定位等,而使用自动代码机只需要输入必要的SQL语句即可,例如要实现下拉列表显示学生姓名,选择以后将对应学号存入数据库,只需填写SQL语句:select name , id from students ,其余的任务就交给自动代码机吧。
5.SQL产生值:与上一种情况类似,不过产生的是一个符合条件的特定值,例如自动填写学生的平均成绩: select avg( score ) from students_scores ,并且可以分为允许最终用户修改和不允许修改两种情况。
6.默认值:即系统对此自动的默认值,也可以分为允许最终用户修改和不允许修改。
以上是最为常见的几种需求,使用这些功能可以大大减轻程序员的工作量并实现快速开发的目标。
另外,为了实现系统的可扩展性,我们特别设计了“自定义下拉列表”模块,可以实现用户自定义项目的动态加载。例如有一个字段为歌曲分类,分成国语歌,粤语歌,台语歌等,用户可以自定义如下文件:
<asp:ListItem Value="1">国语歌</asp:ListItem>
<asp:ListItem Value="2">粤语歌</asp:ListItem>
<asp:ListItem Value="3">台语歌</asp:ListItem>
自动代码机能接受并识别用户自定义的文件,并完成各种相关处理。此模块大大提高了系统的可扩展性,为软件设计时无法包罗的需求提供了有效的补充,并为将来的其他扩展提供了接口。
自动代码机从前几步获取了必要信息之后,使用标签替换技术对模板文件中的标签进行替换,生成可用代码。
由于 .net 代码具有一定框架性,例如信息显示分成 aspx 页面表示层和 cs 代码业务层,由业务层与数据库进行交互操作。由于框架具有一定的通用性,将框架的通用代码抽取成模板文件,对其中需要替换的部分使用标签进行标记,在生成代码时对模板中的标签用对应的具体信息进行替换,最终生成完整的代码。模板文件和标签替换的工作流程如图2所示。
模板文件 main_mode.cs ………… string $3$; ………… 标签 标签替换 …………. song_id 替换 $3$ ……….. 最终代码 main_song.cs ………… string song_id; ………….. 标签对应的替换信息
图2 标签替换工作流程图
在图示中只是对替换过程进行了简单的说明,在实际设计时,主要包括三个方面:
1. 模板文件的抽取。首先我们深入分析了 asp.net 程序的代码,对典型的实际应用程序进行分层剥离,抽取出其中的通用代码框架。
2. 标签设计。标签的设计非常关键并且种类较多,我们设计了23种标签,主要分为三类:普通标签,例如定义变量等 ; 复杂标签 ,例如逻辑判断 ;复合标签,即前两种标签的复合体,例如循环处理模块。
3. 标签替换。自动代码机的主要工作就是利用从用户和数据库获取的信息,经过预处理,生成实际的信息对相应的标签进行替换。标签替换分为显示模块和修改模块,每个模块又分为页面层和业务层,对各层替换时先局部后全局,先简单后复合,保证替换的正确性。
模板和标签替换方式的优点:
1. 层次清晰。最终代码的层次源自模板代码,清晰的模板层次保证了最终代码的分层原则。
2. 可理解性。模板文件是独立的文件,用户可以方便的阅读模板文件,便于理解。
3. 可修改性。这也是模板文件最大的优点。用户在理解模板的基础上可以对模板进行修改,并会在生成的项目代码中立即体现出来。如果把模板文件固化在自动代码机中则用户无法修改模板,虽然在编写自动代码机时会简单但将失去灵活性,所以我们选择了外挂模板文件的处理方式。
4. 可替换性。模板除了可以局部修改之外,也可以整套替换。可以提供多套模板由用户选择。
5. 通用性。模板是在多种实际需求基础上抽取出来的,具有较大的通用性,无需修改即可适应大多数项目,对于比较特殊的需求可以在最终代码基础上进行修改。
6. 一致性。由于所有生成的代码都是在由模板产生的,代码在页面层和业务层的风格上具有严格的一致性,类似于工厂化生成。对格局的修改可以通过对模板修改完成。
一套完整代码的生成不可能一次成形,期间可能会经过多次修改,并且将来可能复用此次代码,为此,自动代码机提供了保存和读取功能。第一次生成一套代码时可以对本次所有信息进行保存,下次可以读取上次的项目,在原有基础上进行修改。
存储介质一般可以选用数据库,XML文件或普通文件,在此项目中我们选择了XML文件,因为此项目中使用XML文件作为存储介质有以下好处:
1. XML存储的信息可以在自动代码机中方便的处理。 .net 对XML提供了很好的支持,程序可以通过 DataSet 对象与XML文件进行直接交互。
2. 将XML文件做为一个本地数据库使用,既得到了数据库操作的方便性,又省去了使用sql server 或其他数据库时带来的累赘,实现了软件的自由移动。
3. 可以充分利用XML的强大功能,实现数据直接的转换和自动处理,例如自动转换成网页以建立所有项目的索引和链接。
以下是我们主XML的部分schema :
<xs:element name="name" type="xs:string" />
<xs:element name="server" type="xs:string" />
<xs:element name="user_name" type="xs:string" />
<xs:element name="password" type="xs:string" />
<xs:element name="database_name" type="xs:string" />
<xs:element name="table_name" type="xs:string" />
<xs:element name="sql_select" type="xs:string" />
对于XML存储文件的详细解释和实例此处不再赘述,有兴趣的读者可以参考我们的实际软件。
目前此软件已经开发成功,通过测试并已在多个实际项目中使用,实现了快速开发并减轻程序员的工作量的预期目的。
使用的部分项目:
1. 莱阳钢铁厂高炉控制系统基础数据录入模块。主要包括各种原料和分析化验报告模块。
2. 济钢第一炼铁厂信息化建设中数据录入模块。此项目在上一个项目的基础上继续发展,另外包括了生产物料的基础数据模块。
3. VOD系统的数据管理模块。对系统的后台数据管理功能用代码机自动生成,省去了原计划独立开发的管理模块。
4. 电子商务开发平台基础信息管理模块。
5. 知识管理原型系统的快速开发。由于使用自动代码机,不必编写代码即可快速生成原型系统,对项目的进一步研究和探讨提供了帮助。
不难看出,自动代码机在基础数据处理上可以大有作为,满足了大多数需求,操作方便,并具有一定灵活性和可扩展性。目前我们正准备在原有基础上进一步发展自动代码机,提供更多的模板和功能模块,并提高其通用性,使更多的开发者能使用此软件。
本文地址:http://com.8s8s.com/it/it45651.htm