CN105260189A - 基于模型驱动生成代码的方法及系统 - Google Patents
基于模型驱动生成代码的方法及系统 Download PDFInfo
- Publication number
- CN105260189A CN105260189A CN201510727834.7A CN201510727834A CN105260189A CN 105260189 A CN105260189 A CN 105260189A CN 201510727834 A CN201510727834 A CN 201510727834A CN 105260189 A CN105260189 A CN 105260189A
- Authority
- CN
- China
- Prior art keywords
- model
- code
- data
- template
- code generating
- 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.)
- Pending
Links
Abstract
本发明公开了基于模型驱动生成代码的方法及系统,系统在数据模型层由数据库模型、模型架构以及代码模板三部分构成,在代码生成的过程中,由模型分析模块从数据库模型及操作模型中获取有编程人员所指定的模型对象,通过模板引擎根据这些对象调用对应的代码模板,最后,代码生成器负责清理这些模型对象之间的关系,并根据模板引擎产生最终的基于对象的代码。本发明一种基于模型驱动生成代码的方法及系统,积极性的代码生成模式;具有双向推导的代码生成机制;具有插件式的代码生成架构;高效率、高质量;因而采用代码生成技术能获得更高质量的代码。
Description
技术领域
本发明涉及生成代码的方法及系统,具体地说是基于模型驱动生成代码的方法及系统。
背景技术
在我们开发程序的过程中,特别是开发一些业务系统的过程中,一些重复的代码总是不可避免的,比如资料的增删改查界面的代码、数据库语句等,这些工作如果要开发人员去手动完成话,不仅会降低开发效率,而且会带来很多潜在缺陷,从而提高了项目的人力资源成本、增大了项目的风险。采用代码生成技术能大幅提高软件开发的质量和生产率,降低软件开发的风险,代码生成是一个专注于解放编码生产力,用程序来编程的研究方向。它是MDA思想的一个重要的技术基础。MDA的基本思想是在软件开发中以模型为驱动,由模型来生成或编译成程序代码,实现软件需求。只有在代码生成技术获得充分发展的基础上,模型驱动架构的思想才能得以实现。
目前,大多数代码生成器都是单一的通过数据库和相关的参数设计来实现,因此灵活性欠佳,不能完全满足软件开发的实际需要,难以在软件开发项目中得到充分的应用。因此在大一些的开发团队中都在使用着各种或公开或自主开发的代码生成工具。
发明内容
本发明的目的是为了解决上述存在的技术问题,提供一种基于模型驱动生成代码的方法及系统。
本发明所采用的技术方案是:
基于模型驱动生成代码的方法及系统,系统在数据模型层由数据库模型、模型架构以及代码模板三部分构成,在代码生成的过程中,由模型分析模块从数据库模型及操作模型中获取有编程人员所指定的模型对象,通过模板引擎根据这些对象调用对应的代码模板,最后,代码生成器负责清理这些模型对象之间的关系,并根据模板引擎产生最终的基于对象的代码。
进一步的,模型架构文档Schema:采用XML来存储模型数据,作为代码生成的数据源,该数据模型XML文档中的结构和语法由XMLSchema来定义,Schema定义了数据模型的规范和格式。
模型分析:主要负责读取数据模型和操作模型XML文件中的数据,并生成类似DOM的内存数模型,作为代码生成器的数据源,完成对象和控制层的数据准备工作。
模板引擎:采用目前比较流行的VeloCity、FreeMaker等模板引擎技术,用数据模型和操作模型中的数据替换模板文件中的可变部分生成最终的代码。
代码生成:根据上述生成的基础数据配合系统架构文档等信息完成代码的生成,在代码生成器中封装了模型到代码的生成规则和转换逻辑。
本发明的有益效果是,
本发明公开的基于模型驱动生成代码的方法及系统,
1、积极性的代码生成模式
本系统的代码生成模式属于积极的代码生成器,即在产生代码后伴随项目的进展对其自动生成的代码可以进行二次维护。用户可在生成的代码文件的标记区域里进行代码的增删改,当代码生成器产生新一轮的代码时,将只修改其原先自动生成的代码。在二次生成的过程中如果发现与手工代码相冲突的代码段,系统自动生成警告消息,并指导用户进行操作。
2、具有双向推导的代码生成机制
系统支持双向代码生成框架,能够根据已经生成代码对框架模板做反向推导,并且能够以插件的方式重构现有代码,支持模型检查,在生成可执行代码前进行相应的模型一致性检查,支持JUNIT测试验证。
3、具有插件式的代码生成架构
系统以自主开发的eclipse插件形式完成交付,能够与目前主流开发IDE完美集成,并提供完整的接口文档,方便与其他第三方系统进行集成。
4、高效率、高质量。
代码生成的工作主要是建立和维护输入模型,而这些输入模型基本上或全部都能从设计模型转化过来,工作量很少,因而软件生成率得到成倍提高。同时,代码生成技术使用代码模板来生成代码,模板越完善,生成的代码就越好。模板改善后,所有生成的代码质量都能提高,并且代码的命名和风格都能保持一致。因而采用代码生成技术能获得更高质量的代码。
下面结合附图对本发明作进一步详细描述。
附图说明
图1为编码阶段流程示意图;
图2为系统架构图;
图3为代码生成器执行流程图;
图4为系统工作流程图。
具体实施方式
为了加深对本发明的理解,下面结合附图和实施例对本发明作进一步详细的说明。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
本发明的实现原理:
基于数据库模型
基于数据库设计模型来生成各种代码,除支持通过已存在的数据库表或SQL查询语句作为模型输入外,还支持标准的XML标准模板,也可以提供与其他基于UML的CASE工具的外接接口。
基于模型架构驱动
开发人员首先编写统一的规范化的XML模型架构文件,基于相应的代码模板和数据模型完成某一类代码的生成任务。通过这种机制,只要定义合适的模板和任务,就可一次性生成项目开发中各种层次和类型的代码,并且很容易维护和重构,从而将代码生成技术完全融入到开发流程中去,实现基于模型架构驱动的开发模式。
基于代码模板技术
代码模板自定义,代码文档组织结构自定义,使用目前广泛使用的模板引擎来编写代码模板,如VeloCity、FreeMaker等快速和易于使用的模板引擎。代码模板引擎具有高效、易使用和强大的扩展性能,用户很容易创建和修改代码模板,从而能生成结构、风格、功能各异的代码。
如图2所示,系统在数据模型层由数据库模型、模型架构(又称操作模型)以及代码模板三部分构成,在代码生成的过程中,由模型分析模块从数据库模型及操作模型中获取有编程人员所指定的模型对象,通过模板引擎根据这些对象调用对应的代码模板,最后,代码生成器负责清理这些模型对象之间的关系,并根据模板引擎产生最终的基于对象的代码。
如图3所示,在代码生成器的具体设计中,采用模型驱动的思想。其中包括模型架构Schema、模型分析、模板引擎、代码等几部分功能。
模型架构文档Schema:采用XML来存储模型数据,作为代码生成的数据源。该数据模型XML文档中的结构和语法由XMLSchema来定义。Schema定义了数据模型的规范和格式。
模型分析:主要负责读取数据模型和操作模型XML文件中的数据,并生成类似DOM的内存数模型,作为代码生成器的数据源,完成对象和控制层的数据准备工作。
模板引擎:采用目前比较流行的VeloCity、FreeMaker等模板引擎技术,用数据模型和操作模型中的数据替换模板文件中的可变部分生成最终的代码。
代码生成:根据上述生成的基础数据配合系统架构文档等信息完成代码的生成。在代码生成器中封装了模型到代码的生成规则和转换逻辑。
如图4所示,工作流程描述:
1、系统设计人员根据业务需求进行概念模型设计,生成相应的数据库表、外键关联等数据库对象。
2、数据库模型生成工具根据表结构生成初步的数据模型XML文档,开发人员在该文档的基础上进一步的完善,生成最终系统能够采用的数据模型文件。
3、高级系统开发人员在完全理解应用程序框架和业务实现模型的前提下手工编写代码,将其作为代码生成器的模板基础。
4、高级系统开发人员针对J2EE目标系统的特点,抽取并建立系统模板,生成代码执行的操作模型。
5、输入代表模块的数据表或SQL语句,执行代码生成系统,实现数据模型到代码模型的自动生成工作。
6、开发人员针对具有特殊性的代码,根据一定的模型修改规范,直接修改生成到的代码文件。
7、针对于业务需求变动或其他功能模块变动,修改数据库模型或页面模型后重新生成可变部分的代码,而对于手工添加的文档,系统保留,如果发生冲突,系统做预警说明。
8、经过多次迭代可发后,最后生成高质量的目标代码,经过编译测试后部署完成。
要说明的是,以上所述实施例是对本发明技术方案的说明而非限制,所属技术领域普通技术人员的等同替换或者根据现有技术而做的其他修改,只要没超出本发明技术方案的思路和范围,均应包含在本发明所要求的权利范围之内。
Claims (2)
1.基于模型驱动生成代码的方法及系统,其特征在于:系统在数据模型层由数据库模型、模型架构以及代码模板三部分构成,在代码生成的过程中,由模型分析模块从数据库模型及操作模型中获取有编程人员所指定的模型对象,通过模板引擎根据这些对象调用对应的代码模板,最后,代码生成器负责清理这些模型对象之间的关系,并根据模板引擎产生最终的基于对象的代码。
2.根据权利要求1所述的基于模型驱动生成代码的方法及系统,其特征在于:包括如下步骤:
模型架构文档Schema:采用XML来存储模型数据,作为代码生成的数据源,该数据模型XML文档中的结构和语法由XMLSchema来定义,Schema定义了数据模型的规范和格式。
模型分析:主要负责读取数据模型和操作模型XML文件中的数据,并生成类似DOM的内存数模型,作为代码生成器的数据源,完成对象和控制层的数据准备工作。
模板引擎:采用目前比较流行的VeloCity、FreeMaker等模板引擎技术,用数据模型和操作模型中的数据替换模板文件中的可变部分生成最终的代码。
代码生成:根据上述生成的基础数据配合系统架构文档等信息完成代码的生成,在代码生成器中封装了模型到代码的生成规则和转换逻辑。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510727834.7A CN105260189A (zh) | 2015-11-02 | 2015-11-02 | 基于模型驱动生成代码的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510727834.7A CN105260189A (zh) | 2015-11-02 | 2015-11-02 | 基于模型驱动生成代码的方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105260189A true CN105260189A (zh) | 2016-01-20 |
Family
ID=55099893
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510727834.7A Pending CN105260189A (zh) | 2015-11-02 | 2015-11-02 | 基于模型驱动生成代码的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105260189A (zh) |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106469064A (zh) * | 2016-09-04 | 2017-03-01 | 深圳市云智易联科技有限公司 | 代码生成方法及代码生成装置 |
CN106775618A (zh) * | 2016-11-09 | 2017-05-31 | 北京许继电气有限公司 | Html5格式移动应用开发平台的代码自动生成方法 |
CN107122183A (zh) * | 2017-04-17 | 2017-09-01 | 上海众开信息科技有限公司 | 业务代码生成方法及装置 |
CN107179903A (zh) * | 2016-03-11 | 2017-09-19 | 塔塔咨询服务有限公司 | 用于使用模型驱动开发来开发基于移动的应用的系统和方法 |
CN107273117A (zh) * | 2017-05-25 | 2017-10-20 | 深圳市彬讯科技有限公司 | 一种编程友好型的敏捷代码自动生成系统 |
CN107291450A (zh) * | 2017-05-25 | 2017-10-24 | 深圳市彬讯科技有限公司 | 一种编程友好型的敏捷代码自动生成方法 |
CN109086326A (zh) * | 2018-07-03 | 2018-12-25 | 贵阳朗玛信息技术股份有限公司 | 一种将接口文档转化成数据模型文件的方法及装置 |
CN109471624A (zh) * | 2018-11-21 | 2019-03-15 | 中国航空无线电电子研究所 | 基于gosaa的共享数据模型控制系统及数据架构生成方法 |
CN109522013A (zh) * | 2018-11-08 | 2019-03-26 | 网宿科技股份有限公司 | 一种业务功能的代码生成方法及装置 |
WO2019179067A1 (zh) * | 2018-03-18 | 2019-09-26 | 平安科技(深圳)有限公司 | 业务逻辑的处理方法、系统、计算机设备和存储介质 |
CN110309071A (zh) * | 2019-06-27 | 2019-10-08 | 杭州数梦工场科技有限公司 | 测试代码的生成方法及模块、测试方法及系统 |
CN110806862A (zh) * | 2019-10-12 | 2020-02-18 | 上海巍驰信息技术有限公司 | 一种基于配置模型自动生成接口程序代码的系统 |
CN110941422A (zh) * | 2019-11-21 | 2020-03-31 | 山东鲁能软件技术有限公司 | 代码自动生成方法、代码生成器及可读存储介质 |
CN111694562A (zh) * | 2020-06-16 | 2020-09-22 | 北京弘远博学科技有限公司 | 代码生成工具 |
CN112114791A (zh) * | 2020-09-08 | 2020-12-22 | 南京航空航天大学 | 一种基于元学习的代码自适应生成方法 |
CN113741902A (zh) * | 2021-09-10 | 2021-12-03 | 百融至信(北京)征信有限公司 | 一种基于模版的SaaS代码生成方法及系统 |
CN113805875A (zh) * | 2021-09-18 | 2021-12-17 | 大连华信计算机技术股份有限公司 | 一种跨语言的代码自动生成平台 |
-
2015
- 2015-11-02 CN CN201510727834.7A patent/CN105260189A/zh active Pending
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107179903A (zh) * | 2016-03-11 | 2017-09-19 | 塔塔咨询服务有限公司 | 用于使用模型驱动开发来开发基于移动的应用的系统和方法 |
CN106469064A (zh) * | 2016-09-04 | 2017-03-01 | 深圳市云智易联科技有限公司 | 代码生成方法及代码生成装置 |
CN106775618A (zh) * | 2016-11-09 | 2017-05-31 | 北京许继电气有限公司 | Html5格式移动应用开发平台的代码自动生成方法 |
CN107122183A (zh) * | 2017-04-17 | 2017-09-01 | 上海众开信息科技有限公司 | 业务代码生成方法及装置 |
CN107273117A (zh) * | 2017-05-25 | 2017-10-20 | 深圳市彬讯科技有限公司 | 一种编程友好型的敏捷代码自动生成系统 |
CN107291450A (zh) * | 2017-05-25 | 2017-10-24 | 深圳市彬讯科技有限公司 | 一种编程友好型的敏捷代码自动生成方法 |
WO2019179067A1 (zh) * | 2018-03-18 | 2019-09-26 | 平安科技(深圳)有限公司 | 业务逻辑的处理方法、系统、计算机设备和存储介质 |
CN109086326B (zh) * | 2018-07-03 | 2023-04-18 | 贵阳朗玛信息技术股份有限公司 | 一种将接口文档转化成数据模型文件的方法及装置 |
CN109086326A (zh) * | 2018-07-03 | 2018-12-25 | 贵阳朗玛信息技术股份有限公司 | 一种将接口文档转化成数据模型文件的方法及装置 |
CN109522013A (zh) * | 2018-11-08 | 2019-03-26 | 网宿科技股份有限公司 | 一种业务功能的代码生成方法及装置 |
CN109471624A (zh) * | 2018-11-21 | 2019-03-15 | 中国航空无线电电子研究所 | 基于gosaa的共享数据模型控制系统及数据架构生成方法 |
CN110309071A (zh) * | 2019-06-27 | 2019-10-08 | 杭州数梦工场科技有限公司 | 测试代码的生成方法及模块、测试方法及系统 |
CN110309071B (zh) * | 2019-06-27 | 2023-01-24 | 杭州数梦工场科技有限公司 | 测试代码的生成方法及模块、测试方法及系统 |
CN110806862A (zh) * | 2019-10-12 | 2020-02-18 | 上海巍驰信息技术有限公司 | 一种基于配置模型自动生成接口程序代码的系统 |
CN110941422A (zh) * | 2019-11-21 | 2020-03-31 | 山东鲁能软件技术有限公司 | 代码自动生成方法、代码生成器及可读存储介质 |
CN110941422B (zh) * | 2019-11-21 | 2023-08-15 | 山东鲁能软件技术有限公司 | 代码自动生成方法、代码生成器及可读存储介质 |
CN111694562A (zh) * | 2020-06-16 | 2020-09-22 | 北京弘远博学科技有限公司 | 代码生成工具 |
CN112114791A (zh) * | 2020-09-08 | 2020-12-22 | 南京航空航天大学 | 一种基于元学习的代码自适应生成方法 |
CN112114791B (zh) * | 2020-09-08 | 2022-03-25 | 南京航空航天大学 | 一种基于元学习的代码自适应生成方法 |
CN113741902A (zh) * | 2021-09-10 | 2021-12-03 | 百融至信(北京)征信有限公司 | 一种基于模版的SaaS代码生成方法及系统 |
CN113741902B (zh) * | 2021-09-10 | 2024-03-29 | 百融至信(北京)科技有限公司 | 一种基于模版的SaaS代码生成方法及系统 |
CN113805875A (zh) * | 2021-09-18 | 2021-12-17 | 大连华信计算机技术股份有限公司 | 一种跨语言的代码自动生成平台 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105260189A (zh) | 基于模型驱动生成代码的方法及系统 | |
CN105242914A (zh) | 一种基于模型驱动生成代码的方法及系统 | |
CN103500087B (zh) | 一种基于maven插件和freemarker模版的代码生成方法及装置 | |
CN103135976B (zh) | 代码自动生成方法及装置 | |
CN102663103B (zh) | 可配置的自动化生成数据库和数据访问的方法 | |
Tisi et al. | On the use of higher-order model transformations | |
CN101763064B (zh) | 面向工艺对象的飞机复杂构件数控加工工艺设计系统及方法 | |
DE60128895D1 (de) | Methode und schema zum anwenden von xml schemata | |
CN105512304A (zh) | 在线生成互联网应用方法和系统集成方法及支撑平台 | |
CN1928816A (zh) | 嵌入式系统软件的模型驱动与构件化开发方法 | |
CN101477462A (zh) | 一种用于动态改变系统行为的模型驱动软件开发方法 | |
CN103593197B (zh) | 一种代码生成方法和装置 | |
Korshunova et al. | CPP2XMI: reverse engineering of UML class, sequence, and activity diagrams from C++ source code | |
Dean et al. | Union Schemas as a Basis for a C++ Extractor | |
JP2007304998A (ja) | ソースコード生成方法及び装置並びにプログラム | |
CN101667134A (zh) | 一种构建编译系统的方法、一种编译系统及其构建装置 | |
CN103309659A (zh) | 基于富客户端的用户界面动态生成方法及其生成装置 | |
Broy et al. | 2 nd UML 2 semantics symposium: formal semantics for UML | |
CN102054043A (zh) | 大数据生成方法和装置 | |
CN102629204A (zh) | 网页源代码生成方法及装置 | |
Ecker et al. | The metamodeling approach to system level synthesis | |
CN101876893A (zh) | Web项目代码自动生成的方法 | |
CN103077038B (zh) | 动态生成和编译.net项目的方法 | |
Śmiałek et al. | Facilitating transition from requirements to code with the ReDSeeDS tool | |
CN110633102A (zh) | 一种基于微服务框架的接口文档自动生成方法及工具 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20160120 |