自动代码(精选九篇)
自动代码 篇1
一、代码自动生成器的原理
代码自动生成器是通过读取工程的元数据, 按照指定的设计模式, 混合产生出规范的源代码, 系统结构图见图1。它利用SQL Server引擎支持, 根据用户指定, 自动提取数据库信息, 包括数据字段、类型、主键、引用及描述等, 根据需要可生成数据库设计说明书、sql脚本, 结合xsl模板生成所需要的代码。
在上面结构图中, 数据库是由用户自已根据需求分析的结果进行手工处理的, 用户可以使用诸如Sybase公司的PowerDesigner或IBM公司的Rational等建模工具进行处理, 当然也可以手工生成, 笔者建议用户使用建模工具进行数据库的构造, 以便于后期当需求发生变更后数据库的修改与维护。数据解析模块根据已生成的数据库自动提取数据库相关信息, 并以xml格式存储。代码自动生成模块根据上一阶段提取获得的基础数据信息, 结合xls模块生成标准的数据实体层、业务逻辑层、数据访问层等, 简单表示层与简单架构独立于以上自动获取的数据。
二、代码自动生成器的功能
按照Jack Herrington的说法, 代码生成并不是一项最新的技术, 它是软件工程技术的延续和发展。
代码自动生成器可以生成三层架构的代码。如果采用类似petshop的架构, 则代码生成效率更高。它可以生成实体类、数据访问层、接口层、类工厂及简单的业务逻辑层, 因此可以节省大量的时间, 从而让程序员有更多的时间来做业务逻辑的代码, 而那些重复的代码则可以直接交给代码生成器去做。
归纳代码自动生成器的功能, 可以总结如下:
1. 自动生成属性注释;
2. 自由设定命名空间和实体类名;
3. 免费提供数据库访问, 页面数据校验等基础类库及封装类库源码。自己可以对其进行修改以满足自己的需要;
4. 支持不同类型数据层的生成;
5. 生成的代码在逻辑上和物理上是独立和完整的, 能够很好的支持变更;
6. 支持选择不同架构代码生成:简单基本三层结构;基于工厂模式+反射机制+缓存机制的复合结构;自定义结构模版;
7. 可以生成增加、显示等页面主体Html代码和后台.cs处理代码;
8. 支持对多种类型数据库生成代码:如SQL Server、Oracle、OLEDB等。
三、代码自动生成器支持的架构模式
代码自动生成器支持简单的三层架构。这里所说的简单的三层架构是指由实体类层、数据存取类层及业务逻辑类层所组成的简化三层架构, 以下分别讨论三个层次的内涵及代码自动生成器生成过程。
业务逻辑类层是一个信息管理系统的核心层次, 不同的业务类别、不同的业务需求需要不同的业务逻辑类, 这里, 代码自动生成器所生成的业务逻辑类层只包含了针对实体类操作的最基本的业务逻辑类。比如, 在学生信息管理系统中有一个学生成绩实体类Score, 则通过代码自动生成器可以生成其对应的增加成绩、更新成绩、删除成绩及获得成绩列表等基本的业务逻辑。
企业信息系统的信息存储往往是基于永久性的存储, 在数据库设计阶段所产生的数据库则对应于该三层架构中的实体类层, 每一个数据表对应于实体类层中的一个实体类。在生成实体类的过程中, 存在着许多重复性的编码工作, 当信息系统的规模相对较大时, 一个数据库的数据表的数量少则有几十个, 多则可能达到几百个, 这时如果完全依赖手工去完成实体类的建造, 一方面会浪费大量的人力物力, 进而会影响到项目的总体进度;另一方面增加了代码编写出现错误的几率, 加大了单元测试阶段的工作量。而代码自动生成器对于实体类的生成则具有极高的效率和准确率。
数据访问类是与实体类及业务逻辑类既密切相关又互相独立的又一个层次。对于整个架构来说, 实体类层处于整个架构的最底层, 为其他层提供可以操作的基本实体准备, 是其他层的基础, 它们的引用关系是从上至下的具体到数据访问层, 它既提供了对实体类层进行数据操作的一组行为, 又为业务逻辑类的公共方法的实现提供了基础, 因此, 它的作用是承上启下的。代码自动生成器在根据实体类生成数据访问类的时候, 可以根据需要自由选择基于SQL语句、基于Parameter参数或基于存储过程的生成方式。
四、结束语
当前, 国内外对代码自动生成技术的研究正方兴未艾, 有关代码自动生成领域的研究深度及广度还在进一步加强, 这一技术不只是软件复用及构件技术的简单延伸, 随着软件工程学的进一步发展及软件开发规模的不断增长, 对代码自动生成的研究必将会发展成为一个独立的专门学科, 丰富并促进软件工程学的进一步发展。
参考文献
[1]湛蓝科技.优秀代码生成器的标准[EB/OL].北京湛蓝科技, 2007
[2]白尚旺, 党伟超.PowerDesigner软件工程技术[M].北京:电子工业出版社, 2008
自动备份web程序的编程代码 篇2
1.cd /home/back
2.rm -f *.tar
3.today=`date +“%Y-%m-%d”`
4.file=webappsback$today
5.tar -cvf $file.tar/home/httpd
6.ftp -n<
7.open 218.56.78.90
8.user ftpuser ftppass
9.binary
10.prompt off
11.cd yourdir
12.hash
13.lcd /home/back
14.mput *
15.bye
DDL代码自动生成工具 篇3
提高软件开发效率、降低开发成本、减轻编程负担是软件开发追求的目标。采用先进的管理模式和开发工具以及训练有素的开发人员, 能在一定程度上实现这一目标。同时针对不同平台的代码生成器也应运而生, 由于用户对软件需求的千差万别, 很难开发出一套重用性较好的代码生成工具。
本文提出的DDL代码生成工具, 就是针对数据库实施阶段, 生成数据库表创建DDL代码的工具。在实际开发中, 创建数据库表通常采用以下两种方法:一种是使用数据库管理系统提供的管理工具, 通过可视化界面, 按照设计书中表字段的定义手动操作来创建, 由于这种方法涉及的手动操作较多, 设计过程比较繁琐, 容易产生因误操作而导致与设计书不一致的错误;另一种方法是根据设计书编写DDL代码, 然后执行代码来创建表, 相对于第一种方法, 这种方法对编程人员来说, 清晰简洁, 并且有利于开发阶段多个开发环境的反复建立, 但人工代码书写难免会产生一些低级的输入错误, 花费不必要的测试和调试时间。实际上表创建DDL代码书写是一件很机械的工作, 如果能把它交给计算机来完成, 将达到事半功倍的效果。本工具实现了从设计书到表创建DDL的自动生成, 通过计算机自动完成, 速度快、正确率高, 在DDL代码编写和测试方面的效率均得以大幅度提高。
1 可行性分析
表创建属于数据库实施阶段的任务, 它在设计完成后进行。表的设计主要体现在对表各字段的描述, 包括字段名、数据类型、长度、是否主键和外键以及对字段的一系列约束等。在实际项目开发中, 几乎90%以上的表设计书都是用Excel的工作表设计的, 我们只要通过编程工具读取Excel工作表中与表定义相关的内容, 然后按照表定义DDL的语法要求对读取内容进行编辑, 将编辑好的DDL语句写入文本文件, 便可生成表创建的SQL文件。几乎所有的高级语言编程工具都能完成上述文件读写功能。因此, 通过计算机根据设计书完成表创建DDL的自动生成是可行的。
2 DDL代码自动生成工具的实现
为了使本工具不额外增加开发环境的软件资源, 我们选用常用工具软件Microsoft Office, 由于表的设计书采用Exce完成, 因此, 我们利用Excel VBA来实现工具的开发。在实现中针对Oracle和SQL Server表定义DDL的细微差别进行处理来对应Oracle和SQL Server两大数据库的DDL自动生成。
2.1 设计思想
创建数据库表的基本语法如下:
表领域定义只限Oracle中使用, 在以下的实现中主要针对Oracle, 对SQL Server在程序中区别处理即可。
其中列级完整性约束包括:NOT NULL限制列取值非空。
DEFAULT给定列的默认值, 使用形式为:DEFAULT常量。
UNIQUE限制列取值不能重复。
CHECK限制列的取值范围, 使用形式为:CHECK (约束表达式) 。
表级完整性约束包括:
PRIMARY KEY定义主键。
FOREIGN KEY定义引用其他表的外键, 使用形式为:
[FOREIGN KEY][<列名>]REFERENCES<外表名> (<外表列名>) 。
从上面的语法可以看出, 在设计书中必须包含的内容有:表名、表领域名、各字段对应的列名、数据类型、长度、列级完整性约束及表级完整性约束。
通常, 用Excel文件中的一个工作表定义一个数据库的表, 工作表中除表头所在行 (如图1中的1-7行) , 其余的每一行描述表的一个字段。不同的软件开发项目, 表设计书的内容和格式不尽相同, 但有关数据库表定义的必须项目却是设计书中必不可少的。因此, 只要明确设计书中与数据库表定义有关的项目在设计书中的单元格地址, 通过读取指定单元格的内容进行编辑, 便可生成表创建的DDL代码。为了让本工具能适应不同设计书模板, 我们将定义不同项目的单元格地址设计成可动态输入的项目, 对于按行循环读取的字段定义, 将其起始单元格地址设计成可动态输入的项目, 在DDL代码生成时, 根据输入的单元格地址或根据起始地址进行一定计算, 读取相应单元格的内容即可。为了便于表的维护, 将每一个表的定义做成一个独立的SQL文件。
2.2 操作界面设计
我们直接在Excel的工作表中完成操作界面的设计, 如图2, 界面中的输入值根据图1所示的设计书模板设定, 界面设计分为5部分:
(1) 数据库类型选择部分:根据选定数据库, 针对不同数据库之间表创建DDL的差异, 在程序中做不同处理。
(2) 文件及路径指定部分:[设计书文件]用于输入表设计书文件的路径及文件名;[SQL文件路径]用于输入即将做成的SQL文件的保存路径;为方便输入, 二者均可点击[选择]按钮打开File Dialog文件对话框进行文件或路径的选择设定。
(3) 设计工作表标志的指定部分:如图1的工作表视图所示, 在设计书文件中, 除了用于数据库表设计的工作表 (后简称设计工作表) , 通常还包括该设计书的封面、说明、ER图等与表创建DDL生成没有直接关系的工作表 (后简称关联工作表) , 因此我们需要筛选出设计工作表。通常各设计工作表的格式和内容具有一定的共性, 其共性体现在各设计工作表某些单元格的内容相同。我们在界面中设定[单元格地址]及其[内容]的输入项, 当工作表对应单元格内容与界面输入内容一致时, 便可确定该工作表为设计工作表。
(4) 表定义项单元格指定部分: (1) 和 (2) 以外的界面输入项, 除[表空间]和[表名]以外均为字段定义的起始单元格地址指定部分。其中[与标志符]和[或标志符]用于CHECK约束表达式的逻辑运算标志设定, 便于根据设计书内容编辑CHECK约束的DDL语句。
(5) 运行部分:采用同一设计书模板, 使用本工具创建数据库表时, 除[设计书文件]和[SQL文件路径]以外, 其余输入项内容相同, 为了避免针对某设计模板创建表时, 界面设定内容的再次输入, 我们可将界面输入内容通过API函数Write Private Profile String写入初始化文件, 再次使用该模板时通过API函数Get Private Profile String读出初始化文件内容设定到界面, 通过[输入保存]和[输入设定]按钮的单击事件实现上述功能。在[DDL生成]的单击事件中, 针对每一个设计工作表生成一个SQL文件。为了便于在后续工作中以批处理方式进行表的创建, 由于Oracle数据库命令不支持"*.sql"的参数形式来执行同一个文件夹下的多个SQL文件 (SQL Server支持) , 因此, 每生成一个SQL文件, 我们都以"@+路径+SQL文件名+;"的形式写入一个多表创建SQL文件, 便可用一条Oracle命令来完成所有表的创建。
2.3 内部设计及实现
具体实现中最重要的处理是[DDL生成], 其处理流程如图3, 其中主要的处理为[字段定义字符串的编辑], 部分字符串编辑程序如下, 其中i为工作表循环变量, j为字段按行循环的变量, 因为Excel工作表中通常用字母表示列编号, 数字表示行编号, 读取单元格内容的Cells函数只接受行列编号的整型参数, 因此我们编写fun_Row No和fun_Colum No函数根据界面输入的单元格地址求出行列标号, 通过Cells函数读出对应单元格的内容。
'DDL字符串编辑处理
'主键制约编辑
'外键制约编辑
接下来是有关缺省值、NULL、UNIQUE及取值范围约束等字符串的编辑, 它们分别赋值到str Deflaut、str Null、str Unique、str Check字符变量中, 将以上编辑好的字符串连接写入SQL文件, 便完成一个字段的定义, 实现程序如下:
每一工作表循环结束向多表创建SQL文件中写入一条语句。
2.4 测试结果
按照图1所示的数据库表设计书及图2所示的界面设定, 单击[DDL生成]生成的SQL文件内容如下:
通过验证及确认测试, 该工具按照设计书正确地实现了表创建DDL代码的自动生成。
3 结束语
在实际运用中, 我们还可以将本工具进行升级, 使其在完成DDL代码做成后, 在本工具中调用数据库管理系统的命令, 直接完成表的创建。可实现从设计书到表创建的一步到位。
参考文献
[1]万军民.基于Java的代码生成器的设计与实现[J].计算机工程, 2004 (S1) .
[2]黄健, 吴延海, 刘晓佩, 等.如何高效开发企业级的数据库信息系统[J].计算机工程与设计, 2005 (8) .
[3]林冰玉, 彭四伟, 汪须忠.软件开发自动化平台的研究与应用[J].计算机工程与应用, 2005 (9) .
自动代码 篇4
定时备份网站数据
代码如下复制代码
#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin;
export PATH;
tar zcvf /web/backup/bak.$(date +%Y-%m-%d).tar.gz /web/www/www.111cn.net
find /web/backup -type f -mtime +2 -exec rm {} ;
第二行:导入环境变量
第三行,把指定目录打个压缩包/web/www/www.111cn.net/目录进行大把,存到指定的目录:/web/backup/中,文件是当前的年月日
第四行:删除两天前的备份文件
mysql自动备份(可删除几天前的数据)
代码如下复制代码#!/bin/bash
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
find /web/backup/mysqlbak/ -mtime +7 -exec rm {} ;#注意:{}和之间有个空格的
mysqldump -uroot -pganggang11560. -B blog > /web/backup/mysqlbak/www.mapenggang.com.$(date +%Y-%m-%d-%k-%m-%S).sql
第一行:就不说了
第二行:导入环境变量,因为在定时任务的时候是没有环境变量的,所以导入一下下,
linux网站数据与mysql数据库自动备份代码linux操作系统
,
传送门
第二行:在/web/backup/mysqlbak/中查找最后修改时间是五天前的文件,并执行 rm命令,{}是将查找的文件名传入!
第三行:mysqldump命令备份数据库,使用root用户连接,导出blog表,将备份存放在/web/backup/mysqlbak/目录下,文件名为:blog加上备份的年月日时分秒
代码如下复制代码
chmod 777 ./bak.sh#给脚本执行权限
crontab -e #修改定时任务
从程序流程图自动生成C代码 篇5
本文阐述的算法可以识别、分析正确的结构化以及半结构化的流程图, 并生成相应C代码。
2 识别与分析流程图的结构
2.1 循环结构的识别
直观上看, 循环结构在流程图中对应着环路结构, 而程序流程图是一幅有向图, 在图论中, 有向图的环路结构形成了强连通分量。因此本文将循环结构的识别问题转化为寻找程序流程图的强连通分量问题。
2.2 菱形结点类型的判定
在程序流程图中, 菱形结点既可以表示循环的条件判断结点 (引领一个强连通分量) , 又可以表示普通的分支结点。为了方便判断菱形结点的类型, 首先定义强连通分量的Head结点和Tail结点:
Head结点:强连通分量的起始寻找结点。
Ta i l结点:有出边走向强连通分量外部;且T a i l==H e a d或Tail->Next==Head
结合强连通分量以及Head、Tail结点的信息, 我们用如下方法判断菱形结点的类型:该结点为矩形结点, 不需要判断类型;该结点为菱形结点, 且构成自循环, 则为while循环结点;否则为if结点。
2.3 环路的消除
要计算嵌套在循环结构内部的强连通分量, 必须将外层强连通分量的环路破坏掉。
while类型循环。对于while类型的循环结构, 构成强连通分量环路的流程回线是循环体中最后一个结点连向Head结点的那条边。除此之外, 循环体内部可能存在其他多条Head结点的入边, 在半结构化流程图中, 这些边都是具有continue含义的半结构化元素, 对于while类型的循环结构, Head结点的来自于强连通分量内部的入边应全部消除。
do-while类型循环与while类似。
2.4 半结构化流程线的识别与转化
在识别与判定循环结构类型的过程中, 内部嵌套的if结构中有可能存在半结构化元素 (continue, break, return) 。识别半结构化流程线的方法如下:
continue:是循环判断结点的入度流程线, 且尾结点属于强连通分量;
break:位于循环结构内部嵌套的分支结构中, 且连向循环出口结点;
return:位于循环结构内部嵌套的分支结构中, 且连向end结点。
3 循环结构线性化与分支结构的分析
3.1 循环结构线性化
流程图中的循环结构对应于环路结构, 为了将循环结构转为线性结构, 从而方便代码生成, 本文引入循环上下界来记录循环结构的起始位置和结束位置。
while类型循环。
将while循环转为上下界的过程如下:
(1) 循环判断结点变为循环上界:id仍为原菱形结点的id, 记录循环的条件表达式。循环上界在生成代码时对应的代码为“while (expr) ”。
(2) 增加循环下界:id是循环上界id的相反数, 条件表达式为空。循环下界在生成代码时对应的代码为“}”。
(3) 下界的前驱和后继:下界的前驱结点应为while循环体内部各控制流汇聚后的最后一个结点, 由于此时还未进行分支结构的分析, 所以无法确定最后的汇聚结点, 因此循环下界的前驱结点暂时留空;下界结点的后继结点为while出口结点。
(4) 删边:删去循环判断结点到循环出口结点的那条边。
do-while类型循环与while类似。
3.2 分支结构的分析
识别并分析流程图结构并将循环结构线性化之后, 只需要再确定出分支结构的域, 以及半结构化结点的后继以及循环下界的前驱, 就可以顺序遍历流程图生成代码了。
分支结构域的确定:分支结构“域”的确定是指if-else结构复合语句块右花括号的定位。分支结构的汇合点指的是if-else结构中两个分支执行完后控制流相汇合的结点。因此, 汇合点表示的是分支结构的出口, 定位右花括号的位置的问题就转化为了如何找分支结构的汇合点。
4 代码生成算法实现
代码生成算法首先完成流程图中循环结构的识别、菱形结点类型的判定以及半结构化流程线的识别, 然后给循环添加上下界将含有环路结构的流程图变为顺序结构的非连通的流程图, 进而在确定分支结构域的过程中确定半结构化节点的后继以及半结构化结点的前驱, 将上一阶段的非连通图变为连通图;最后将遍历转化好的顺序的结构化的流程图, 拼接各结点对应的代码生成最终C代码。
5 实验结果
以下仅选取一个典型结构的流程图作为测试用例进行实验:
6 总结与展望
本文处理的流程图还比较简单, 下一步希望能处理更复杂的流程图。
摘要:本文设计并实现了标准程序流程图的C代码自动生成算法。
自动代码 篇6
关键词:自动代码生成,CCS,DM642EVM,边缘检测
0 引言
随着电子技术和计算机技术的进步,尤其是数字信号处理器芯片速度的提高,数字信号处理技术在控制、音频处理、图像处理等领域中的应用己越来越广泛和深入。传统的DSP代码开发方法需要编写汇编或C语言代码,编写过程过于复杂因而开发效率不高。然而在整个软件生命周期中,所有工作的核心都是围绕着编码而展开的[1],因此,快速代码生成方法尤其是自动代码生成方法成为DSP代码开发的研究重点。
近年来TI公司和Mathworks公司联合推出的开发环境Embedded Target for TI′s C2000/C5000/C6000DSP Platform[2,3](ETTIC2000/5000/6000,文中使用ETTIC6000)和接口工具Matlab Link for CCS Development Tools[4](CCSLink)使得自动代码生成方法成为了可能。本文对自动代码生成方法进行了研究,并用边缘检测实验对该方法的有效性进行了验证。
1 基于DM642的自动代码生成技术
1.1 自动代码生成技术
近几十年来DSP被广泛地应用于各个领域,与此同时,DSP程序设计方法也在不断地发展和改进,其中最主要的3种方法及特点如表1所示。为了充分发挥Matlab软件开发周期短和汇编代码执行效率高的优势,同时降低DSP程序开发难度并标准化生成的DSP程序,Texas Instruments携手Mathworks公司推出了一个开发环境ETTIC2000/5000/6000和接口工具CCSLink。
ETTIC6000可以使用Real-Time-Workshop从Simulink模型生成标准的ANSI C程序代码,然后通过CCSLink调用CCS开发工具编译链接这些C代码,生成指定目标板(C64xx或C64xx Simulator)的可执行代码,并把生成的可执行代码加载到目标板中进行算法实时性评估,自动代码生成过程如图1所示。ET-TIC6000还可以利用CCSLink对DSP实时应用程序进行交互式调试和测试[5]。
1.2 DM642EVM开发板的性能
本文采用TI公司的DM642EVM开发板。该评估板的核心为TMS320DM642数字多媒体处理芯片。TMS320DM642是TI公司推出的功能比较强大的TMS320C6x系列之一,是目前定点DSP领域里性能较高的一款[6]。芯片的内核为C64xDSP核,时钟频率为600MHz,指令执行速度高达4 800 MIPS,具有6个并行的算术逻辑单元与2个并行的硬件乘法器,利用先进的超长指令字结构,DM642可以完成复杂的数字图像处理运算[7]。为了提高处理器的存取速度,C64x还提供了一些特别适用于数字图像处理的指令。该评估板除了包括TMS320DM642数字多媒体处理芯片外、还有4 MB的FLASH,32 MB SDRAM和32 KB的E2PROM;它还拥有丰富的外部接口,如3个可以配置的视频端口,一个多通道串行音频接口,一个以太网接口以及PCI口等。因此还适用于做视频监控、视频、音频编解码、网络流媒体等多种用途。实验中采用TDS560USB PLUS仿真器。仿真器的一端通过JTAG插头连接到DM642EVM板,另一端通过USB线缆与PC机的USB口相连。
2 边缘检测模型及其自动代码生成
2.1 边缘检测模型的建立
边缘检测的实质是采用某种算法来提取出图像中对象与背景线的交界线[8],在图像处理过程中具有重要的意义。经典的边缘检测方法是构造对像素灰度级阶跃变化敏感的一阶微分算子,如Sobel算子、Prewitt算子[9]和Roberts算子,它们对噪声较为敏感,检测出的边缘比较粗,定位精度比较低,容易损失如角点这样的细节信息。最优算子Canny算子[10,11]对边缘的定位比较准确,但对噪声过于敏感,容易检测出伪边缘;高、低阈值修补不连续轮廓需要人为设定高、低阈值,没有顾及梯度图像中的信息特征,不具有自适应能力,一方面无法消除局部噪声干扰;另一方面会丢失灰度值变化缓慢的弱边缘,导致目标物体的轮廓边缘不连续,实验效果不是很好。
此外,传统的边缘检测大多以灰度图像作为处理对象,而彩色图片的灰度图像并不能表现原图的所有边缘特征,在处理过程中容易丢失部分边缘。鉴于此,本文先采用直方图均衡化模块对图像的R,G,B图像进行处理,提高图像的对比度;之后采用Canny算子和Sobel算子的优化组合进行边缘检测;最后再进行融合得到最终的边缘检测结果。模型结构图如图2所示。
2.2 自动代码生成
模型搭建完成后需要设置模块参数和Configuration Parameters参数,要特别注意Real-Time-Workshop页面中System target file下.tlc文件的选择,所选文件的文件名因Matlab版本不同而有差别(可能为ti_c6000.tlc,idelink_ert.tlc,详见各版本的Matlab用户说明)。其他需要设置的参数如下:
Stop time:inf
Type:Fixed-step
Solver:discrete(no continuous states)
Fixed-step size(fundamental sample time):auto
Configuration Parameters中的其他参数为默认设置即可。单击Real-Time-Workshop页面的Build按钮,ETTIC6000,Matlab,CCSLINK和CCS将按1.1节所述的原理协同合作,自动在CCS中生成工程和标准的C语言代码,最终CCS自动对代码文件进行编译链接并将生成的.out文件下载到DM642EVM板中运行。Matlab的Command Window会显示整个过程的进度。
3 实验结果和对比分析
本文以一幅512×512图像为例进行边缘检测验证。可执行代码自动运行后先通过CCS界面的View→Watch Window的Watch 1窗口查看变量值,再根据查得的变量值设置View→Graph→Image的Graph Property Dialog对话框,点击OK按钮后CCS便会显示出该变量值对应的图像。原图像、经典算子的边缘检测结果、Canny算子的边缘检测结果和本文基于DM642的边缘检测结果分别如图3~图6所示。
图4中WNR表示Canny算法中弱边缘和无边缘像素近似百分比。可以看出,经典梯度算子检测出的边缘图中弱边缘缺失比较严重(各图的左半部分较明显),且检测出的边缘都较粗,检测效果不理想。图5表明,Canny算子取低阈值时可以检测出图像的所有边缘,但是伪边缘太多,使得真实边缘难以辨认;取高阈值时又会造成弱边缘的缺失。很难找到一个最佳阈值,因此实用性不强。图6表明,使用文中的边缘检测方法,Canny模块阈值的选取对检测结果几乎没有影响,且得到的边缘检测结果都是非常清晰、全面的细化边缘。大量实验表明,只要模型中Canny模块的阈值不大于90就可以得到非常清晰、全面的细化边缘。
4 结语
针对传统DSP代码生成方法效率低,难度大等缺点,重点介绍了自动代码生成技术的原理及实现方法,充分利用了Matlab简单易用及DSP处理器执行效率高的优势,快速生成了标准化的C语言代码和DSP可执行文件,极大地缩短了代码的开发时间。实验结果表明,自动生成的代码运行良好,可以检测出更加全面、清晰的细化边缘,充分体现了该自动代码生成方法的可行性和实用性。运用该代码生成方法,DSP程序设计人员可以专注于整体框架的设计和模型性能的完善,从而最大限度地提高代码生成效率和代码质量。
参考文献
[1]林成文,吴成富.机载软件图形化设计与自动代码生成研究[D].西安:西北工业大学,2007.
[2]The MathWorks,Inc.Embedded IDE LinkTM4user's guide[R].Natic,MA:The MathWorks,Inc.,2010.
[3]The MathWorks,Inc.Target support packageTM 4user'sguide[R].Natic,MA:The MathWorks,Inc.,2010.
[4]The MathWorks,Inc.Link for code composer studio devel-opment tools[EB/OL].[2006-07-28].http://www.ic72.com/news/15891.html.
[5]李真芳,苏涛,黄小宇.DSP程序开发:Matlab调试及直接目标代码生成[M].西安:西安电子科技大学出版社,2003.
[6]谢红梅,俞卞章.基于小波变换数据融合的图像边缘检测算法[J].电路与系统学报,2004,9(2):118-121.
[7]Texas Instruments.Evaluation module(EVM)for theTMS320DM642quick start installation guide[R].US:Texas Instruments,2003.
[8]杨帆.数字图像处理与分析[M].北京:北京航空航天大学出版社,2007.
[9]BOSE T.数字信号与图像处理[M].吴镇扬,周琳,译.北京:高等教育出版社,2006.
[10]李弼程,彭天强,彭波,等.智能图像处理技术[M].北京:电子工业出版社,2004.
自动代码 篇7
随着Internet的飞速发展, 网络已经发展成为一个全球性的巨大的信息空间[1,2], 其所包含的大量信息是一个巨大的资源宝库[3]。信息抽取技术是从这一资源宝库中获取所需要的数据与信息的一种技术, 其核心是能够从Web网页所包含的无结构或半结构的信息中识别用户感兴趣的数据, 并将其转化为更为结构化、语义更为清晰的格式[4,5,6,7,8]。
在地理国情普查、基础测绘生产中往往需要详细的行政区划代码用来做境界等数据层的元数据。国家统计局网站发布的行政区划代码涵盖全国, 详细至行政村级, 现势性强而且权威, 在实际生产中, 具有较大用途。但是国家统计局网站发布的行政区划代码是级联网页的形式, 使用起来不方便, 主要体现在需要在线使用和不利于进行查询。如果采用人工的方法将行政区划代码一条一条复制粘贴成本地文件, 则耗时费力而且容易出现错误。编写程序, 自动从国家统计局网站获取行政区划代码并整理成本地文件是一个快速、准确的解决办法。
2 网站与数据组织结构
为了自动、快速获取国家统计局网站行政区划代码, 首先需要分析网站结构、数据组织和数据后台存储方法。行政区划代码数据在国家统计局网站的统计数据子页面的统计标准栏目,在该栏目的下方有分年度“统计用区划代码和城乡划分代码”。
2.1 数据组织结构
统计用区划代码和城乡划分代码数据的组织方式为级联式网页结构, 级联方式为分年度—分省—分市州—分区县—分乡镇—各个行政村。数据结构为网页中的表格, 字段分为代码和名称两列。
2.2 数据存储
分析后台数据存储方式主要是为了将数据下载到本地后, 在自动获取时分析处理数据嵌套关系。通过URL地址, 分析出数据在存储时, 具体到某个省, 具体组织方式是以省级区划代码为名称建立省级文件夹, 该文件夹下存储一个html页面和若干子文件夹, html页面具体内容为该省分市州代码和名称表, 子文件夹为分市州文件夹。市州和区县文件夹和省级文件夹存储方式类同。
3 自动获取方法
自动获取方法分为两个步骤: 第一步将数据下载到本地,第二步自动将数据整理成本地Excel文件。
3.1 数据下载
为了防止在使用程序自动获取行政区划代码数据时, 出现网络中断等情况致使获取失败, 需要先将网站中的统计用区划代码和城乡划分代码子网站下载到本地。具体方法为使用网络下载工具wget将整个统计用区划代码和城乡划分代码子网站下载到本地, 并且自动保留数据的存储结构。
3.2 自动整理
自动整理主要技术方法是在Excel表中使用宏命令实现,关键步骤有两个, 第一是将外部的html页面中的数据表格导入到Excel表格中; 第二是通过循环和判断语句, 实现多级级联子文件夹下的所有html页面批量导入Excel表中, 生成分市州行政区划代码数据文件。
(1) 外部html页面导入Excel关键代码
(2) 所有html页面批量导入Excel表
3.3 成果形式
为了便于使用, 最终整理的行政区划代码数据是分市州的, 每个市州为一个Excel表文件。每个市州以县区、乡镇为群组进行组织。
3.4 效率对比
国家统计局网站上的甘肃省行政区划代码数据有1000多个页面, 上万条记录。采用人工方式, 大约需要一个人投入7个工作日, 准确率无法保证百分之百; 采用自动整理方式, 下载数据需要一个小时, 自动整理每市州需要不到一分钟, 准确率为百分百。
3.5 数据更新
关注国家统计局网站中发布的统计用区划代码和城乡划分代码, 若发布最新数据, 则采用上述方法重新自动整理,实现数据更新。
4 结语
采用该方法自动整理行政区划代码数据, 大幅缩短了处理时间, 并且确保了数据整理的准确性。该方法的关键是实现了将结构化的网络页面数据整理成本地Excel文件, 方便阅读和查询, 适用于结构化或半结构化的网站信息自动提取,具有较强推广和实用意义。
摘要:在地理国情普查、基础测绘生产中往往需要详细的行政区划代码作为某种要素的属性项。国家统计局网站发布的行政区划代码涵盖全国,详细至行政村级,现势性强而且权威,在实际生产中,具有较大用途。但是国家统计局网站发布的行政区划代码是级联网页的形式,使用起来不方便,特别是不利于查询。介绍了基于Excel宏命令,自动获取行政区划代码,并整理成本地Excel文件,提高使用便捷性。
自动代码 篇8
代码自动生成技术就是利用计算机程序自动地产生可用代码。它的引用可以使软件更健壮, 并且缩短软件开发的时间。在信息管理系统开发工作中, 如果能尽可能重用已有的设计和代码, 将会加快开发进度, 而且可以提高软件产品质量[1]。如果能够按照一定的规范和流程, 自动生成全部或者大部分的信息管理系统代码[2], 一方面, 能够解放开发人员, 使开发人员的主要精力可以关注在业务方面, 这样可以提高软件产品的设计质量[3];另一方面能够缩短软件项目开发周期, 减少开发时间, 降低成本。于是如何通过代码自动、快速地生成原型系统的问题越来越受到人们的重视。它利用DOM4J、Velocity模板技术, 提出了一个基于模板的代码自动生成方案, 一定程度上解决了特定业务领域的管理信息系统的代码自动生成。
1 关键技术介绍
在一些领域, 已经有代码自动生成平台应用于实际的项目开发, 其主要应用领域是信息管理系统的开发。据实际统计, 代码自动生成技术可以节省70%的开发时间。常见的平台系统中包括四种模型, 分别是数据查询、数据删除、数据新增和数据更新。代码自动生成一般都是围绕着这四种操作模型进行研究的[4]。代码自动生成是一种开发方法, 而不仅仅是一个工具。代码自动生成技术的基本功能是读取定义好的业务对象的元数据, 例如数据库模型、数据库的表名、字段名等信息。然后根据一定的模式和规则以及模板生成相应的源代码。
1.1 两种常用代码自动生成技术介绍
常用的代码自动生成技术有基于模型驱动架构MDA (Model Driven Architecture) 的代码生成技术和使用XML语言、XSLT技术的代码自动生成技术。
MDA[5]是基于模型驱动架构, 由对象管理组织OMG定义的一个软件开发框架, 是一个以模型为核心的新一代软件开发方法, 它通过将业务模型与实现技术相分离, 以提高软件的可重用性和可移植性。MDA将模型区分为平台无关模型 (PIM) 和平台相关模型 (PSM) , 它的核心思想是抽象出与实现技术无关、完整描述业务功能的平台无关模型 (PIM) , 按照一定的转换方法, 将PIM转换成与具体实现技术相关的平台相关模型 (PSM) , 最后, 再将经过充实完善的PSM模型转换成相应的代码[6], 实现难度较大, 成本较高。
利用XML语言、XSLT技术的代码自动生成技术, 需要构造一种模板语言, 使用XML描述其文法[7]。其优点在于文法描述的直观性, 可利用现有的诸多XML编辑以及解析工具。同时, 通过XML的有效性检验, 避免意外操作, 及时有效地检验文档的语法及合法性。但此代码自动生成技术的缺点是依赖于某个特定的技术平台以及编程语言。
1.2 DOM4J及Velocity模板技术介绍
针对结合某个特殊领域快速生成信息管理系统的特殊业务需求, 并能较好地控制软件开发成本, 本文提出了基于Velocity模板技术以及DOM4J将XML描述的模型无关模型, 自动生成数据库的定义语言以及数据库操作语言, 以及符合特定增、删、改、查的信息管理系统的相关页面信息。下面将简要介绍DOM4J及Velocity模板技术。
DOM4J是Sourceforge的开源项目, 类似JDOM, 主要用于对XML文档的解析[8]。它应用于Java平台, 采用了Java集合框架并完全支持DOM、SAX和JAXP。它的主要接口都在org.dom4j这个包里定义[9]。本文利用DOM4J包对转换后的XML文档进行解析, 由于Dom4j提供了各种接口和函数便于用户创建、读写、遍历XML文档, 且对XPath有良好的支持, 可以利用它方便地搜索出每个节点包含的业务逻辑信息进行解析, 并自动生成代码。
Velocity是基于Java的模板引擎技术, 它能够使Java代码和页面分离, 在使用Velocity时, 程序设计人员和页面模板设计人员首先在一个模板中确定一组数据, 程序设计人员和页面设计人员就可以在各自开发中对它们进行独立操作, 实现真正的并行开发[10]。Velocity通过Java程序将数据置入Context对象, 选择调用需要的模板, 模板中嵌入的VTL (模板标志语言) 元素将引用Context对象中的数据, 与页面模板相结合产生需要的输出。由于Velocity在模板中不使用Java代码, 模板语言元素仅仅对Context对象中的数据提供访问, 从而可以脱离代码独立设计和维护。
2 自动生成技术研究
2.1 平台总体架构
在代码自动生成平台中, 结合快速生成信息管理系统的业务需求, 利用DOM4J以及Velocity模板技术将XML文档中描述的相关的业务对象实体信息自动映射成两类类信息:相对应的表结构和相对应的增、删、改和查询操作的JSP的UI页面以及框架页面、查询页面、脚本页面等。
本文研究的目的就在于创建一种快速生成具有信息管理系统的代码生成平台, 其体系结构和工作流程如图1所示。
在实际的应用中, 客户根据自身的业务需求, 向系统分析员提出信息管理系统需求;系统分析员根据需求分析建立数据结构, 并根据建模工具生成与客户需求相关的实体业务对象以及该业务对象的相关权限的XML文档。并利用DOM4J以及相关Velocity模板引擎生成信息管理系统所需要特定操作模型的JSP源代码以及相关的数据库定义语言 (DDL) 生成业务表结构、数据库操作语言 (DML) 操作系统的模型库。当特定用户访问某个相关模块的业务对象对应的模块的时候, 对应页面的TAG标签就会根据标签库以及基础数据载入模块、消息处理分发器、数据转换模块、权限控制等运行时服务去解析相关操作以及访问权限, 最后生成一条具体的数据库查询语句, 完成相关数据的展现。
本文的研究是代码解析生成器, 如何快速地生成信息系统。主要有两类代码自动生成:1) 利用模板, XML文档以及相关DOM4J以及相关Velocity模板引擎, 生成数据库的定义语言以及数据库操作语言;2) 生成符合特定增、删、改、查的管理信息系统的相关页面信息。在代码自动生成的系统的主要思想是, 抽象出管理信息系统的相对相似重用的实现方式, 形成一系列规范的统一的格式和目标代码, 极大地提高系统的重用性。
2.2 数据库代码的自动生成
数据表的创建、修改、删除, 以及在数据库表的创建、修改、删除时对数据库表中的数据的备份以及处理。就是根据XML文件中的业务对象的XML描述, 解析XML文件, 将其中的标签解析成DDL语句。如图2所示。
根据XML文件中的state状态来动态地产生数据库定义语言:
①new:按照XML文件中描述的业务对象的对象名、字段名、字段类型等meta信息, 生成ddl语言并创建到数据库中;
②delete:根据传入的业务对象名, 直接生成dropddl语句, 删除该表结构;
③modify:这种情况比较复杂, 首先需要创建临时表, 用于插入到修改表结构后的新表中, 其次是删除原表, 然后创建修改了结构的表, 再然后插入临时表中的数据到新表, 最后删除临时表。
2.3 业务代码的自动生成
2.3.1 平台无关的数据管理模型分析以及设计
根据代码自动生成技术的系统需求定义, 可以确定数据模型 (平台无关模型) , 具体如图3所示。
定义的平台无关数据操作模型是一个通用的模型, 它可以扩展到对多个信息实体以及业务对象。从图中可以看出整个页面流, 本文中定义了五个页面来实现图中所述的对管理信息系统的增、删、改、查操作:
1) KJ页面, 在框架页面中分为两个Frame:第一个是QUE-RY页面, 第二个是BG页面;
2) QUERY页面, 主要是用来实现对信息管理系统的查询, 该页面上放有查询条件以及查询按钮;
3) BG页面, 也就是用来展现多条记录的功能, 当查询条件变化时展现满足条件的数据记录;
4) BD页面, 表单页面是用来实现数据记录的新增, 以及数据记录的修改, 在表单字段的属性中有个字段是用来标识是新增还是修改;
5) JB页面, 主要是放置公共脚本函数, 比如查询函数、保存函数、删除函数, 以及其他的可扩展的实现业务逻辑的脚本函数。
2.3.2 业务代码自动生成技术平台的设计
为了自动生成代码, 首先要确定系统源代码中重复的代码部分, 这部分代码在这里用模板的形式实现。自动代码生成的过程就是软件复用的过程。首先对系统架构进行分析, 系统通过整合一些输入文件产生一个或多个输出文件, 这其中输入文件包括, 模板文件, 是输出的不可变的部分, 也是软件重用的部分;数据定义文件, 将是输入文件的一部分, 针对不同实例定义了不同的数据。输出文件则是产生的输出的源代码文件。
图4是自动代码生成系统设计图。XML数据文件、模板文件的生成, 既可以通过文本编辑的方式, 也可以通过可视化的工具来完成, 本文中是利用业务建模工具产生的中间语言—XML文件作为XML文件的输入。模板文件是实现定义好的EPT文件, 在UI模板文件中定义好与业务对象实体相关的变量, 其他的可以用Web, DHTML或者Java等变量中任何方式的常量。
本文通过Velocity模板技术将满足代码自动生成平台总体需求的五个EPT模板文件解析成JSP页面文件, 实现信息管理系统的增、删、改、查操作。下面将研究XML文件的定义以及模板文件的设计。
1) XML数据中间文件的描述
XML数据文件是自动代码生成的重要文件之一。在这里, XML文件是利用代码自动生成平台的建模工具生成的中间描述、存储业务实体相关信息。之所以采用XML文件的格式来保存业务对象实体信息, 是由XML文件的特点决定的。通过XML, 用户可以在不兼容的系统之间交换数据;而且各大公司的主要产品都是支持XML的传输与交互。
在XML数据定义文件, 为自动生成的代码提供了必要的业务对象信息, 也方便了对代码的升级。当需要修改自动生成的代码时, 可以通过修改XML文件作为重新生成的源代码。
XML数据中间文件在自动代码生成平台中的作用如下:
(1) 代替EPT模板中的动态部分, 从而生成符合信息管理系统需求的五个文件源代码;
(2) 当需要修改代码的时候, 可以通过修改XML文件来修改源代码。
在系统设计中, 采用XML文件来描述代码自动生成平台的中间描述语言, 标签名与标签值在SQL的DDL语句的生成, 以及五个UI文件的生成都密切相关, 比如
而在页面的UI文件的生成中, 将会利用诸如
2) 模板文件的设计
代码自动生成平台需要生成5个JSP页面来完成对XML文件特定业务对象实体进行增、删、改、查。所以这里定义了五个EPT模板, 分别是KJ.EPT、QUERY.EPT、BG.EPT、BD.EPT和JB.EPT。通过模板解析引擎, 生成对应的KJ.JSP、QUERY.JSP、BG.JSP、BD.JSP和JB.JSP等五个文件, 每个文件的主要功能在前面章节中已经介绍过了, 这里就不加以复述。下面将重点介绍一下BD.EPT文件的设计。
$符号后就是需要根据XML中的业务对象需要动态替换的变量, 经过引擎的解析后, $后的变量将被替代, 生成满足业务需求的表单页面代码。
3 代码自动生成技术的实现
3.1 DDL代码自动生成技术的实现
平台中使用DOM4J来解析XML业务对象描述的文件, DOM4J是一种解析XML文档的开放源代码XML框架, DOM4J是dom4j.org出品的一个开源XML解析包。DOM4J是一个易用的、开源的库, 用于XML, XPath和XSLT。它应用于Java平台, 采用了Java集合框架并完全支持DOM, SAX和JAXP。
在DDL中, 无外乎表名、字段名、字段属性等, 只要将XML业务对象描述文件解得到这几类信息, 然后将其与CREATE、DROP、MODIFY组合使用, 就可以生成DDL语句。主要是通过以下几个方法来获取表名、字段名、字段属性等:
①get Biz Object Name () , 主要是获得该XML文件的XML文件的业务对象名, 即表名;
②get Field Names () , 主要是获得该XML文件的
③get Field Types () , 主要是获得该XML文件的Biz Object->Biz Obj Property->的
获得XML业务对象的信息后, 将这些信息与CREATE、DROP、MODIFY组合生成DDL语句。
3.1.1 DDL生成实例
在整个DDL生成中, 通过XML业务对象获得META信息后, 这些操作、表名、字段属性等与CREATE、DROP、MODIFY组合生成DDL语句情况比较复杂, 便于说明, 本文只解析新增这种情况。
下面是XML语言描述的业务对象:
通过DOM4J解析XML文件中的表名 (T_NDKH_XJSHB) 、字段名 (SQDM) , 该字段为文本, 大小为10, 并为主键。通过这些信息与CREATE语句组合成DDL语句并执行到数据库中, 其代码如下:
3.2 业务代码的自动生成
3.2.1 解析XML数据文件
主要思想是, 读取相关的信息, 并将读取的信息以某种方式保存下来, 以供第二部分替换使用。首先, 根据前面XML数据文件的定义, XML数据文档中的主要节点有标签名和标签值两部分, 而且由于读取XML数据文件的定义, 就是需要解析其中的标签名和标签值。从XML定义和上面模板类型可以得出, 标签值中也可能嵌套其他的标签名和标签值, 采用Java反射机制, 传入方法名和参数来调用Xml Parser类中相应的方法来解析XML业务对象数据, 并将解析结果传输给模板解析的Template Parser类, 最后生成代码。
3.2.2 解析模板文件
解析模板定义文件, 找到标签名, 并从上面解析XML定义文件中找到相关的业务对象meta数据相关信息, 然后当需要时则从XML解析出来的业务相关实体信息进行将动态的部分相应的替换, 从而输出相应的常量代码。
解析模板文件的过程主要如下:
1) 选择模板;2) 引擎初始化;3) 创建上下文对象;4) 将数据对象添加入上下文;5) 将模板与上下文结合产生代码输出。
读取变量, 就是从模板中读取特殊的标签, 比如#foreach ($value in$LIST) , 然后在前面读取的上下文中搜索。如果是常量正常输出;如果找到了相应的标签, 则根据Velocity模板技术取其值进行变量替换, 然后继续进行模板中变量名的查找, 进行下一轮的模板解析, 如果在上下文中没有找到与其对应的标签, 则出现异常报告错误。
其流程为:获得Velocity Engine的实例, 并初始化, 然后读入需要解析的EPT模板, 并取得上下文Velocity Context。通过Param Properties获得业务对象XML的解析的业务对象名、字段集合 (字段名和字段类型集合) 对象、得到字段名集合等, 并将字段名放到list中, 通过context.put (″LIST″, list) , 将字段组合赋值给模板中的LIST标签。
3.2.3 模版解析实例
以下是符合代码自动生成平台的需要模板:
其中$BIZOBJECTNAME是业务对象名, 就是表名。Foreach循环, 类似与java中是的foreach循环, 它是Velocity的语法, 其中$value, 是定义变量value, 类似于高级语言中的int value变量, 如果value在字段名集合的LIST中, 则循环。
所以模板代码可以解析为:
4 结语
本文首先从代码自动生成框架的MDA成本过高、XML语言、XSLT技术的代码自动生成技术复杂度等方面的原因, 结合快速的生成信息管理系统的业务需求, 基于Velocity模板技术以及DOM4J将XML描述的模型无关模型, 自动生成数据库的定义语言以及数据库操作语言, 以及符合特定增、删、改、查的信息管理系统的相关页面信息, 用以应对客户快速变化的需求, 一定程度上解决了特殊需求领域的代码快速生成需求。但目前该自动生成技术还不能完全满足某些大规模应用的需求, 这将在以后的工作中得到进一步深入研究解决。
参考文献
[1]段继磊.利用XML构架构件技术实现B/S模式下MIS程序的自动生成[D].昆明:昆明理工大学, 2002:5-12.
[2]周颍.企业信息系统快速开发方法的研究与设计[D].广州:华南理工大学, 2001:7-23.
[3]Ingo Stuermer.A Contribution of Graph Grammar Teehniques to the Specifieation Verifieation and Certification of Code Generation Tools[J].Electronic Notes In Theoretical Computer Science, 2002, 72 (2) :102-103.
[4]王晓宇, 钱红兵.基于UML类图和顺序图的C++代码自动生成方法的研究[J].计算机应用与软件, 2013, 30 (1) :190-195.
[5]谢正良, 赵建华, 李宣东, 等.一种基于J2EE平台的MDA模型转换技术[J].计算机应用研究, 2005 (3) :51-54.
[6]宋瑾钰, 蒋国明.基于UML扩展机制的MDA协议建模语言研究[J].计算机工程与设计, 2009, 30 (5) :1113-1114.
[7]朱敏.一种基于SSH框架的MIS代码生成系统的设计与实现[J].南京师范大学学报:工程技术版, 2012, 12 (3) :49-51.
[8]Dom4j[EB/OL].http://www.dom4j.org/.
[9]刘钊夏, 何明昕.利用JTidy和XML实现Web数据信息的批量提取[J].计算机工程与设计, 2010, 31 (6) :1242-1245.
自动代码 篇9
代码自动生产框架主要由代码模板、数据模型和代码转换引擎组成;实现过程所涉及到的技术有元数据、XML、ORM和类反射等。如图1所示。
元数据:描述数据的结构和意义;元数据是对数据资源的一种描述, 是数据信息共享和交换的基础和前提, 元数据用于描述数据集的内容、表示方式、组织方式以及数据集的一些其他特征。元数据同样也是数据, 当然也可以作为被描述的对象, 这时描述它的数据代码模板就是元数据。在信息系统中一般来说, 把数据看成是独立的信息单元, 不管这里的“数据”是一本书、一个网页或者是一个虚拟的URL地址。元数据可以出现在:数据内部、独立于数据、伴随着数据、或与数据包裹在一起。
XML:可扩展标记语言 (eXtensible Mar kup Lan-guage简称:XML, 是一种标记语言。标记指计算机所能理解的信息符号, 通过这样的标记, 计算机可以处理包含各种信息的文件。XML旨在传输和携带信息, 而不是用来表现或展示数据, 用来表示数据的是HTML语言。使用X ML语言主要是用来表示数据和承载数据的含义, 用来定义如何呈现信息, 描述文件或网络信息, 介绍软件的参数设置。
ORM:对象关系映射 (Object Relational M apping, 简称ORM) 是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。Hibernate就是一种基于ORM的产品。简单的说, ORM是通过使用描述对象和数据库之间映射的元数据, 将程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。OR M方法论基于三个核心原则:1) 简单:以最基本的形式建模数据;2) 传达性:数据库结构被任何人都能理解的语言文档化;3) 精确性:基于数据模型创建正确标准化了的结构。
类反射机制:反射的概念是由Smith在1982年提出, 主要指程序可以访问、检测和修改它本身状态或行为的一种能力。在计算机科学领域, 反射是指一类应用, 它们能够自描述和自控制, 这类应用通过采用某种机制来实现对自己行为的描述和监测, 并能根据自身行为的状态和结果, 调整描述或修改应用所描述行为的状态和相关语义。
2 代码自动生成在MIS中的实现
数据模型是代码自动生成框架的基础模型, 具有高度的抽象性, 描述系统中的需求信息。在数据模型中, 对系统的建模视角是“系统的业务逻辑是如何表现在数据上的”。在本文中, 数据模型以XML文件的形式表示。
2.1 数据库配置数据模型
数据库配置的元数据主要描述数据库的属性, 包括服务器的名称、用户名、密码、数据库的类型和数据库名等等。
图2是数据库中表和视图生成元数据, 主要描述数据库中表和视图的结构, 包含列信息, 即列的名称、类型、大小、是否是主键、是否为标识信息。
数据库表中的主键字段生成的属性模板包含的参数有属性的名称、属性的类型、主键的类型以及对应的ORM的数据类型。
2.2 代码生成引擎
代码生成引擎是整个代码生成框架的核心, 是一个独立的应用程序;以目标系统的数据模型为基础, 根据不同的代码模板生成代码, 实现基本的数据增加、删除、修改、查询等操作。把代码自动生成框架应用到管理信息系统中, 具有以下优势:一是将业务开发和系统开发分离, 程序开发人员只需实现具体的业务逻辑;二是尽量避免重复开发, 提高了程序开发效率;三是统一管理代码, 便于维护。管理信息系统以数据信息的处理为中心, 弱化业务流程的变化对软件开发的影响, 减少系统的复杂程度, 提高软件开发的效率。
参考文献
[1]张巨俭, 甘仞初.管理信息系统的发展方向及实现技术[J].计算机应用研究, 2003, 20 (1) :8-10.