CN100561476C - 一种基于asn类型对象的代码生成方法 - Google Patents
一种基于asn类型对象的代码生成方法 Download PDFInfo
- Publication number
- CN100561476C CN100561476C CNB2006101523454A CN200610152345A CN100561476C CN 100561476 C CN100561476 C CN 100561476C CN B2006101523454 A CNB2006101523454 A CN B2006101523454A CN 200610152345 A CN200610152345 A CN 200610152345A CN 100561476 C CN100561476 C CN 100561476C
- Authority
- CN
- China
- Prior art keywords
- code
- asn
- database
- file
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及一种基于ASN类型对象的代码生成方法,包括定义ASN对象形成对应的程序源文件;生成代码产生工具;编写对应映射规则文件;利用所述代码产生工具并输入所述映射规则文件自动生成被调用的数据库出/入库源代码和被嵌入的数据库脚本代码。这种方法彻底克服ASN对象存储到数据库表的实现技术难度,解决了现有技术手工编写大量的数据库出库和入库代码和数据库表定义脚本代码费时费力并且开发效率不高的问题。
Description
技术领域
本发明涉及ASN和代码自动生成技术,具体涉及一种基于ASN类型对象结构,生成出库和入库程序源代码和数据库表结构脚本代码的方法。
背景技术
抽象文法表示法ASN,是用于描述不同系统之间通讯时所用的数据结构的抽象描述。它是一种用于描述结构化客体的结构和内容的语言,是描述在网络上传输信息格式的标准方法,类似与高级程序设计语言的数据描述部分。
在通讯及其相关的行业中,特别是传输网管软件系统的设计多采用软总线方式,如ASN的类型对象结构,来实现各个模块之间的数据通讯,由于数据库模块是整个软件系统ASN对象进行通讯的总集散模块,频繁使用ASN对象,数据库采用的是关系型数据库,将ASN定义的网元类型对象映射到数据库DB的网元表的过程,需要编写大量的数据库出库和入库的代码,还有编写数据库DB的网元表定义和生成的脚本代码,这样需要花费大量的时间和人工编写代码,并且编写代码的复杂度增高,映射关系的翻译麻烦复杂且效率低。
另一方面,这种映射和数据出库及入库的操作是有共性的,便于采用规则自动实现ASN的对象映射数据库表的结构,还可采用规则利用数据存取对象DAO模式生成ASN对象出/入库的程序源代码。
发明内容
本发明需要解决的技术问题是如何提供一种基于ASN类型对象的代码生成方法,克服ASN对象存储到数据库表的实现技术难度,解决现有技术手工编写大量的数据库出库和入库代码和数据库表定义脚本代码费时费力并且开发效率不高的问题。
本发明的上述技术问题这样解决,提供一种基于ASN类型对象的代码生成方法,其特征在于,包括以下具体步骤:
1.1)根据规范定义ASN对象的类型结构描述,并形成对应的程序源文件;
1.2)根据所述结构描述和对应的程序源文件生成代码产生工具;
1.3)根据所述ASN对象与对应的关系数据库表之间的映射规则编写对应映射规则文件;
1.4)利用所述代码产生工具并输入所述映射规则文件自动生成被调用的数据库出/入库源代码和被嵌入的数据库脚本代码。
按照本发明提供的代码生成方法,所述方法还包括步骤:
1.5)在数据库模块中集成所述源代码,并在数据库中嵌入所述脚本代码。
按照本发明提供的代码生成方法,所述步骤1.1)中的规范可以是传输网络管理系统的F口规范或软件系统内各个模块之间的通讯规范。
按照本发明提供的代码生成方法,所述步骤1.1)中的程序源文件可以是通过SNACC编译器自动生成的,也可通过其他编译器。
按照本发明提供的代码生成方法,所述步骤1.2)中代码产生工具包括ASN结构定义描述模块,ASN翻译模块,映射文件语法分析器,对象与关系映射定义模块,ASN元数据提供模块和代码生成器。
按照本发明提供的代码生成方法,所述对象与关系映射定义模块包括一整套数据出/入库SQL调用方法,这些方法集成到一个sql文件中,存放在自动生成工具使用的参数-script的目录中。
按照本发明提供的代码生成方法,所述步骤1.3)具体包括:
1.3.1)利用所述代码产生工具和ASN对象生成与所述ASN对象对应的供修改的映射规则文件;
1.3.2)根据具体的映射规则修改所述供修改的映射规则文件。
按照本发明提供的代码生成方法,步骤1.3.1)中所述映射规则文件是根据软件系统各个模块通讯功能的需要生成的。
按照本发明提供的代码生成方法,所述步骤1.4)还包括所述源代码和脚本代码被自动输出至指定的目录中。
本发明提供的代码生成方法,由于将自动编码技术应用到具体的ASN对象与数据库映射和出/入库中,同人工编写出库入库代码和设计编写数据库表结构脚本相比,具有以下的几个优点:
1.极大的提高了开发的效率和节约了开发时间,降低了开发成本;
2.提供了一整套数据库出库和入库的方法,同时也可以灵活定制数据库接口的方法,调用的灵活度高;
3.降低了数据库模块编写出库和入库方法的复杂度和技术实现难度,模块的封装性好;
另外,生成的数据库表的脚本,支持不同的数据库使用;而且整个编译器支持不同的平台使用,适合不同操作系统的开发平台使用;同时,本发明对使用人员有一定的技术要求,需要具有软件开发的基本知识和数据库开发使用的基本知识,是提供给专业开发的人员使用的,使用人员掌握了使用的技能,对开发数据库模块的接口程序起到事半功倍的效果。
附图说明
下面结合附图和具体实施例进一步对本发明进行详细说明。
图1是一种ASN类型结构与数据库中表结构的具体映射关系示意图。
图2是另一种ASN类型结构与数据库中表结构的具体映射关系示意图。
图3是利用本发明代码生成工具DAOBuilder开发数据访问功能模块的流程图示意图。
具体实施方式
首先,说明映射:ASN类型的实例是ASN对象,ASN对象映射数据库的表结构就是ASN类型结构映射到数据库中表的结构过程,如图1、2中所描述的,定义了一个ASN的网元类型为ManagedElement-T,它映射到网元表,映射关系图1是1∶1的关系、图2是1∶N的关系,在1∶1的映射关系中,每个网元类型的属性对应一个网元表的字段,对于网元参数的属性,ASN类型采用的是名值对数据列表,映射到网元表中的网元参数字段,字段的值存放形式是采用压缩值的方式将多个网元参数压缩成一个压缩字串进行存放;在1∶N中的映射关系中,网元类型ManagedElement-T的网元参数映射到网元主表的方式是建立网元参数从表的网元参数ID,映射到网元参数从表的方式是将网元参数一一存入表中,不采用压缩的方式存储。ASN中的SEQUENCE类型在映射的过程中称为Class,是映射的基本单位,class的实例称为对象,通常保存为数据库表中的一条记录。
第二步,说明本发明代码生成工具DAOBuilder:该工具用于自动产生数据库的出入库代码,实现ASN类型与数据库表的对象与关系映射。这个工具根据预先编写的ASN结构与数据库表之间的映射XML文件,产生ASN对象的入库、出库代码,并产生相应的数据库脚本。
该代码生成工具具体由ASN结构定义描述模块,ASN翻译模块,映射文件语法分析器,对象与关系映射定义模块,ASN元数据提供模块,代码生成器六个部分组成。
最后,以自定义ASN的网元类型和设备单板类型利用该代码生成工具DAOBuilder自动编码的方式开发数据库功能模块为例,结合图3,对本发明做进一步描述,包括五个步骤,分别是:
(一)定义ASN类型结构描述
根据传输网络管理系统的F口规范的ASN结构或软件系统各个模块通讯规范的ASN结构,形成需要进行存储数据到数据库的ASN类型结构描述,生成结构描述的程序源文件;
(二)生成能自动生成代码的工具
集成结构描述的程序源文件,编写生成能被集成的ASN结构描述接口定义代码,集成映射文件语法分析器31,对象与关系映射定义模块32,ASN元数据提供模块33,代码生成器34,利用ASN翻译模块和开发系统编译模块联合生成能自动生成代码的工具;集成结构描述文件的目的是将通过SNACC编译器编译ASN结构描述文件生成的C++等源文件绑定到自动生成代码的工具中,以编译环境集成的方式实现,比如将网元的ASN文件编译后生成了网元的C++源文件,然后通过编译文件makefile的方式将其集成到自动生成代码的工具中;编写生成能被集成的ASN结构描述接口定义代码是将生成的ASN结构的描述结构类型定制到自动生成代码的工具的main.cpp的文件中,以结构数组的方式存在,同是将所需要的头文件填写其中;集成映射文件语法分析器是已经开发完毕的ASN语法解析的功能模块,是处理ASN结构映射到表和数据库结构的解析翻译工作;对象与关系映射定义模块是处理映射关系实现的功能模块,实现1∶1和1∶n的映射关系;ASN元数据提供模块是将解析和映射的ASN关系以元数据的方式提供给自动生成代码的模块,是以数据基础的方式存在;代码生成器是集合上述的功能模块,通过解析和映射的关系和ASN的元数据集合,生成数据库接口的中间源代码和生成数据库表的代码;
(三)根据ASN类型结构描述编写映射的xml规则文件
1.根据ASN类型结构描述,利用生成的这个工具翻译选定的某一个ASN类型,生成映射规则文件中class的结构雏形,存入手工编写的xml规则文件;
2.手工修改规则文件中class的结构,按照ASN类型映射到数据库表的映射关系进行设计编写规则class的结构,定义好接口中个性使用的SQL调用方法;这个自定义的sql方式是根据ASN的结构属性,根据业务的需要定义某个或某些属性的数据库操作的方式。
3.根据软件系统各个模块通讯功能的需要定义好不同的映射规则,形成设计好的文件,以便被能自动生成代码的工具使用;
(四)工具采用规则文件作为入口,自动生成源代码和数据库脚本文件编写生成代码使用的配置文件(如makefile文件),或自动生成代码的批处理文件,定制好工具使用自动生成代码的命令格式和输出的路径,使用工具生成程序源代码和数据库脚本,输出到制定的目录中;
(五)集成自动生成的源代码到数据库模块中,使用自动生成的数据库脚本到数据库中生成应用表,完成代码的自动生成和使用;
其中,每一步的具体实现是:
(一)自定义网元类型ManagedElement-T和设备单板类型Equipment-T,形成ASN结构描述文件,编译生成ASN类型对应的源代码文件,具体包括步骤:
(1-1):定义网元类型和单板类型,存入网元的managedElement.asnl和设备单板的equipment.asn1
网元类型的结构定义:
ManagedElement-T::=SEQUENCE{
name NamingAttributes-T,网元名称
userLabel GraphicString(80), 用户标签
meParameters NVSList-T, 网元参数列表
additionalInfo NVSList-T 附加属性
}
设备单板类型的结构定义:
Equipment-T::=SEQUENCE{
name NamingAttributes-T,单板名称
userLabel GraphicString(80), 用户标签
boardParameters NVSList-T 单板参数
supportOperationsValue NVSList-T单板参数取值范围和缺省值
additionalInfo NVSList-T 附加属性
}
(1-2):使用可产生METADATA的SNACC编译器编译定义的网元和单板的ASN文件,生成它们对应的源代码文件managedElement.cpp和managedElement.h以及equipment.cpp和equipment.h。
(二)编译生成工具DAOBUILDER,具体包括步骤:
(2-1):将网元类型的结构描述ManagedElementModuleDesc和设备单板的结构描述加入工具DAOBuilder的入口代码里的ASNModuleDesc队列中;
const AsnModuleDesc*buidlerAsnModuleDescs[]=
{
&ManagedElementModuleDesc,
&EquipmentModuleDesc,
NULL
}
(2-2):集成ASN结构描述文件生成的源代码文件,将这些源文件的头文件managedElement.h,equipment.h定制到DAOBuilder的Main.cpp中,建立起了ASN描述文件同工具DAOBuilder的联系。
(2-3):编译已经集成好的DAOBuilder编译器,生成可以执行的文件。
(三)编写映射规则文件resource.xml,具体包括步骤:
(3-1):使用工具DAOBuilder,根据命令参数的选择生成ASN结构描述ManagedElement-T和Equipment-T到规则文件中class的基本映射,也可以采用手工的方式进行编写规则class的定义结构;
(3-2):定义映射到数据库表的名称和主键,如网元的数据库表的名称为ME,主键为name.name和name.value,是网元属性中的名值对,定义各个属性映射到表的字段的长度;
(3-3):根据数据库的性能和功能设计的需要,设计表中特殊字段的处理规则。如网元表,确定好网元参数映射到网元表的字段MeParameters是采用压缩的方式存储list形式的值,具体的设计见class的结构说明,如下:
<class id=″ManagedElement_T″name=″ManagedElement_T″
dao-name=″MEDAO″ table=″ME″name-strategy=″full″>
<property name=″name.name″ column=″Name_Name″
length=″20″/>
<property name=″name.value″ column=″Name_Value″
length=″60″/>
<property name=″userLabel″ column=″UserLabel″ length=″80″/>
<array name=″meParameters″column=″MeParameters″ length=″800″>
<primarykey>
<key name=″name″/>
</primarykey>
</array>
<array name=″additionalInfo″column=″AdditionalInfo″length=″500″>
<primarykey>
<key name=″name″/>
</primarykey>
</array>
<primarykey>
<key name=″name.name″/>
<key name=″name.value″/>
</primarykey>
</class>
这是网元的ASN结构映射到规则文件中class的结构,内部定义了数据库表的名称ME,ASN的属性对应ME表的字段定义,表的主键定义。网元参数meParameters,采用的是压缩的形式将网元的参数存入到网元表的MeParameters字段内,网元的附加属性也是采用压缩的方式存储到网元表的字段内;
另一方面,可以定义接口中个性使用的SQL调用方法,具体可以是在规则定制的class中,填写
<select-sqlname=″findByResource″
where=″%resourceObject like?″
/>
<update-sqlname=″setActive″
set=″%ifActive=?″
where=″%ruleid.name like?and%ruleid.value like?″
/>
<delete-sql name=″deleteByRuleid″
where=″%ruleid.name like?and%ruleid.value like?″
/>
(四)使用工具DAOBuilder自动生成源文件和数据库表脚本文件,具体包括步骤:
(4-1):编写makefile文件,定义DAOBuilder的输入规则文件resource.xml和输出路径;
(4-2):执行工具DAOBuilder,将数据库脚本文件和自动生成的源代码输出到指定的目录,源文件为resource-map.h、resource-map.cpp、
resource-map-rdb.h、resource-map-rdb.cpp,数据库脚本为resource.sql;
(五)集成自动生成的源文件到系统的数据库功能模块中,使用自动生成的出入库的接口方法,在数据库中生成数据库表ME,Equipment,包括具体步骤:
(5-1):使用数据库脚本resource.sql,在DBMS类型的数据库中生成表ME和Equipment
(5-2):集成自动生成的源文件到数据库模块database中,可以编译使用这些自动生成的源文件;
(5-3):在数据库模块database内调用网元和设备单板的出库和入库的方法,这些方法的调用方式如下:
声明DAO类工厂的网元DAO,如auto_ptr<MEDAO>
pMEDAO(GetDAOFactory()->getMEDAO(GetConnection
()));
(a):根据共同父类继承通用入库方法
ManagedElement_Tme;
pMEDAO->insert(me);
(b):根据共同父类继承通用出库方法
pMEDAO->findAll();
pMEDAO->findByCriteria(条件);
(c):根据需要灵活定制数据库处理的方法。
Claims (9)
1、一种基于ASN类型对象的代码生成方法,其特征在于,包括以下具体步骤:
1.1)根据规范定义ASN对象的类型结构描述,并形成对应的程序源文件;
1.2)根据所述结构描述和对应的程序源文件生成代码产生工具;
1.3)根据所述ASN对象与对应的关系数据库表之间的映射规则编写对应映射规则文件;
1.4)利用所述代码产生工具并输入所述映射规则文件自动生成被调用的数据库出/入库源代码和被嵌入的数据库脚本代码。
2、根据权利要求1所述代码生成方法,其特征在于,所述方法还包括步骤:
1.5)在数据库模块中集成所述源代码,并在数据库中嵌入所述脚本代码。
3、根据权利要求1所述代码生成方法,其特征在于,所述步骤1.1)中的规范是传输网络管理系统的F口规范或软件系统内各个模块之间的通讯规范。
4、根据权利要求1所述代码生成方法,其特征在于,所述步骤1.1)中的程序源文件是通过SNACC编译器自动生成的。
5、根据权利要求1所述代码生成方法,其特征在于,所述步骤1.2)中代码产生工具包括ASN结构定义描述模块,ASN翻译模块,映射文件语法分析器(31),对象与关系映射定义模块(32),ASN元数据提供模块(33)和代码生成器(34)。
6、根据权利要求5所述代码生成方法,其特征在于,所述对象与关系映射定义模块(32)包括一整套数据出/入库SQL调用方法。
7、根据权利要求1所述代码生成方法,其特征在于,所述步骤1.3)具体包括:
1.3.1)利用所述代码产生工具和ASN对象生成与所述ASN对象对应的供修改的映射规则文件;
1.3.2)根据具体的映射规则修改所述供修改的映射规则文件。
8、根据权利要求7所述代码生成方法,其特征在于,步骤1.3.1)中所述映射规则文件是根据软件系统各个模块通讯功能的需要生成的。
9、根据权利要求1所述代码生成方法,其特征在于,所述步骤1.4)还包括所述源代码和脚本代码被自动输出至指定的目录中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101523454A CN100561476C (zh) | 2006-09-26 | 2006-09-26 | 一种基于asn类型对象的代码生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101523454A CN100561476C (zh) | 2006-09-26 | 2006-09-26 | 一种基于asn类型对象的代码生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101154227A CN101154227A (zh) | 2008-04-02 |
CN100561476C true CN100561476C (zh) | 2009-11-18 |
Family
ID=39255888
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006101523454A Expired - Fee Related CN100561476C (zh) | 2006-09-26 | 2006-09-26 | 一种基于asn类型对象的代码生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100561476C (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
BRPI0913690A2 (pt) * | 2008-09-30 | 2017-07-25 | Avfinity Llc | Mídia legível por computador tangível e método |
CN101697120B (zh) * | 2009-11-05 | 2012-11-28 | 河南辉煌科技股份有限公司 | 基于关系型数据库的j2ee代码生成方法 |
CN103473058B (zh) * | 2013-09-10 | 2016-09-14 | 北京思特奇信息技术股份有限公司 | 一种生成asn1数据文件的便捷编码方法 |
CN105389339A (zh) * | 2015-10-20 | 2016-03-09 | 咸亨国际(杭州)物联网信息产业有限公司 | 一种快速生成数据库sql语句和实体类的工具 |
CN107977236B (zh) * | 2017-12-21 | 2020-11-13 | 上海智臻智能网络科技股份有限公司 | 问答系统的生成方法、终端设备、存储介质及问答系统 |
CN109032582A (zh) * | 2018-07-19 | 2018-12-18 | 郑州云海信息技术有限公司 | 一种生成服务器运维脚本的方法及装置 |
CN111061468B (zh) * | 2019-12-20 | 2023-10-10 | 北京爱奇艺科技有限公司 | 一种映射方法及装置 |
CN111427567B (zh) * | 2020-03-20 | 2023-08-18 | 杭州涂鸦信息技术有限公司 | 一种智能产品快速生成方法及其系统和设备 |
CN113535142A (zh) * | 2020-04-16 | 2021-10-22 | 浙江大搜车软件技术有限公司 | 自动生成Bean拷贝代码的方法及装置 |
CN116339703B (zh) * | 2023-05-24 | 2023-08-15 | 北京蓝天航空科技股份有限公司 | 总线接口代码生成方法、装置、电子设备及介质 |
-
2006
- 2006-09-26 CN CNB2006101523454A patent/CN100561476C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101154227A (zh) | 2008-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100561476C (zh) | 一种基于asn类型对象的代码生成方法 | |
Kang et al. | FORM: A feature-; oriented reuse method with domain-; specific reference architectures | |
CN101334728B (zh) | 一种基于xml文档描述的界面生成方法和装置 | |
CN101958987B (zh) | 电信业务数据动态转换的方法及其系统 | |
CN102542002B (zh) | 一种卫星遥测数据处理系统以及其实现方法 | |
CN101841515B (zh) | 可变目标的协议数据单元编解码代码自动生成的实现方法 | |
CN103412853B (zh) | 一种针对文档转换器的测试用例自动生成方法 | |
CN101699397B (zh) | 实现Java与XML数据绑定的方法 | |
CN100520718C (zh) | 脚本命令注册方法、调用源程序代码的方法和装置 | |
CN100389391C (zh) | 一种利用脚本及其编译器调用宿主软件函数的系统与方法 | |
US20050108684A1 (en) | Method and system for generating an application object repository from application framework metadata | |
CN100435113C (zh) | 基于c++映射的ttcn-3测试系统及测试方法 | |
CN101354759A (zh) | 一种基于元模型的工作流流程定义转换的方法及系统 | |
CN103218294A (zh) | 一种嵌入式系统的调试方法、调试转换装置和系统 | |
CN107609302B (zh) | 一种产品工艺结构生成方法及系统 | |
CN114841326A (zh) | 深度学习框架的算子处理方法、装置、设备和存储介质 | |
CN103744647A (zh) | 一种基于工作流GPD的Java工作流开发系统及其方法 | |
CN103049251A (zh) | 一种数据库持久层装置及数据库操作方法 | |
CN103914290A (zh) | 一种操作命令处理方法及装置 | |
CN107797823A (zh) | 业务规则管理方法、装置、存储介质和计算机设备 | |
CN101211262A (zh) | 一种软件体系结构描述语言的快速构建和支持的方法 | |
CN107729561A (zh) | 基于数据库表结构反向生成对数据库表操作的方法 | |
CN101303646B (zh) | 基于可执行元语言的电信领域建模方法 | |
CN110825718A (zh) | 一种信息系统数据架构模型及其构建方法 | |
CN101055521B (zh) | 映射规则的可视化生成方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20091118 Termination date: 20150926 |
|
EXPY | Termination of patent right or utility model |