CN105242914A - 一种基于模型驱动生成代码的方法及系统 - Google Patents
一种基于模型驱动生成代码的方法及系统 Download PDFInfo
- Publication number
- CN105242914A CN105242914A CN201510556852.3A CN201510556852A CN105242914A CN 105242914 A CN105242914 A CN 105242914A CN 201510556852 A CN201510556852 A CN 201510556852A CN 105242914 A CN105242914 A CN 105242914A
- Authority
- CN
- China
- Prior art keywords
- model
- code
- data
- template
- code generation
- 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 |
---|---|---|---|
CN201510556852.3A CN105242914A (zh) | 2015-09-06 | 2015-09-06 | 一种基于模型驱动生成代码的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510556852.3A CN105242914A (zh) | 2015-09-06 | 2015-09-06 | 一种基于模型驱动生成代码的方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105242914A true CN105242914A (zh) | 2016-01-13 |
Family
ID=55040573
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510556852.3A Pending CN105242914A (zh) | 2015-09-06 | 2015-09-06 | 一种基于模型驱动生成代码的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105242914A (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106775618A (zh) * | 2016-11-09 | 2017-05-31 | 北京许继电气有限公司 | Html5格式移动应用开发平台的代码自动生成方法 |
CN106886406A (zh) * | 2017-01-19 | 2017-06-23 | 阿里巴巴集团控股有限公司 | 开发代码或文档的生成方法和装置 |
CN106933598A (zh) * | 2017-03-27 | 2017-07-07 | 广州市轩辕云翰信息科技有限公司 | 实现模板文件的自动化管理的方法及系统 |
CN107589938A (zh) * | 2017-09-07 | 2018-01-16 | 广东电网有限责任公司信息中心 | 一种电力信息集成技术规范服务生成方法及装置 |
CN107705199A (zh) * | 2017-08-07 | 2018-02-16 | 阿里巴巴集团控股有限公司 | 特征计算代码的生成方法和装置 |
CN108228174A (zh) * | 2017-12-06 | 2018-06-29 | 链家网(北京)科技有限公司 | 加快软件开发中编码效率的方法及装置 |
CN109408043A (zh) * | 2018-10-19 | 2019-03-01 | 中国银行股份有限公司 | 一种程序生成方法及装置 |
CN110018822A (zh) * | 2019-04-16 | 2019-07-16 | 山东浪潮通软信息科技有限公司 | 一种自动生成微服务功能的方法及系统 |
CN110806862A (zh) * | 2019-10-12 | 2020-02-18 | 上海巍驰信息技术有限公司 | 一种基于配置模型自动生成接口程序代码的系统 |
CN111324342A (zh) * | 2020-02-10 | 2020-06-23 | 北京字节跳动网络技术有限公司 | 一种生成接口层代码的方法、装置、介质和电子设备 |
CN112799638A (zh) * | 2021-01-12 | 2021-05-14 | 杨飞 | 无侵入式快速开发方法、平台、终端及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101256492A (zh) * | 2008-03-31 | 2008-09-03 | 宋乃辉 | 一种进行模型驱动架构的软件开发方法及其系统 |
US20120102451A1 (en) * | 2010-01-13 | 2012-04-26 | Tata Consultancy Services Limited | Computationally efficient system for developing configurable, extensible business application product lines using model-driven techniques |
CN103500087A (zh) * | 2013-09-17 | 2014-01-08 | 福建亿榕信息技术有限公司 | 一种基于maven插件和freemarker模版的代码生成方法及装置 |
-
2015
- 2015-09-06 CN CN201510556852.3A patent/CN105242914A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101256492A (zh) * | 2008-03-31 | 2008-09-03 | 宋乃辉 | 一种进行模型驱动架构的软件开发方法及其系统 |
US20120102451A1 (en) * | 2010-01-13 | 2012-04-26 | Tata Consultancy Services Limited | Computationally efficient system for developing configurable, extensible business application product lines using model-driven techniques |
CN103500087A (zh) * | 2013-09-17 | 2014-01-08 | 福建亿榕信息技术有限公司 | 一种基于maven插件和freemarker模版的代码生成方法及装置 |
Non-Patent Citations (2)
Title |
---|
万军民: "基于Java的代码生成器的设计与实现", 《计算机工程》 * |
冯英英: "基于MDA的代码生成技术的研究与应用", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106775618A (zh) * | 2016-11-09 | 2017-05-31 | 北京许继电气有限公司 | Html5格式移动应用开发平台的代码自动生成方法 |
CN106886406A (zh) * | 2017-01-19 | 2017-06-23 | 阿里巴巴集团控股有限公司 | 开发代码或文档的生成方法和装置 |
CN106933598A (zh) * | 2017-03-27 | 2017-07-07 | 广州市轩辕云翰信息科技有限公司 | 实现模板文件的自动化管理的方法及系统 |
CN107705199B (zh) * | 2017-08-07 | 2021-04-13 | 创新先进技术有限公司 | 特征计算代码的生成方法和装置 |
CN107705199A (zh) * | 2017-08-07 | 2018-02-16 | 阿里巴巴集团控股有限公司 | 特征计算代码的生成方法和装置 |
CN107589938A (zh) * | 2017-09-07 | 2018-01-16 | 广东电网有限责任公司信息中心 | 一种电力信息集成技术规范服务生成方法及装置 |
CN108228174A (zh) * | 2017-12-06 | 2018-06-29 | 链家网(北京)科技有限公司 | 加快软件开发中编码效率的方法及装置 |
CN109408043A (zh) * | 2018-10-19 | 2019-03-01 | 中国银行股份有限公司 | 一种程序生成方法及装置 |
CN110018822A (zh) * | 2019-04-16 | 2019-07-16 | 山东浪潮通软信息科技有限公司 | 一种自动生成微服务功能的方法及系统 |
CN110806862A (zh) * | 2019-10-12 | 2020-02-18 | 上海巍驰信息技术有限公司 | 一种基于配置模型自动生成接口程序代码的系统 |
CN111324342A (zh) * | 2020-02-10 | 2020-06-23 | 北京字节跳动网络技术有限公司 | 一种生成接口层代码的方法、装置、介质和电子设备 |
CN111324342B (zh) * | 2020-02-10 | 2023-04-07 | 北京字节跳动网络技术有限公司 | 一种生成接口层代码的方法、装置、介质和电子设备 |
CN112799638A (zh) * | 2021-01-12 | 2021-05-14 | 杨飞 | 无侵入式快速开发方法、平台、终端及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105260189A (zh) | 基于模型驱动生成代码的方法及系统 | |
CN105242914A (zh) | 一种基于模型驱动生成代码的方法及系统 | |
CN103500087B (zh) | 一种基于maven插件和freemarker模版的代码生成方法及装置 | |
CN103135976B (zh) | 代码自动生成方法及装置 | |
CN102663103B (zh) | 可配置的自动化生成数据库和数据访问的方法 | |
CN103049251B (zh) | 一种数据库持久层装置及数据库操作方法 | |
CN101763064B (zh) | 面向工艺对象的飞机复杂构件数控加工工艺设计系统及方法 | |
CN101667134B (zh) | 一种构建编译系统的方法及编译系统构建装置 | |
DE60128895D1 (de) | Methode und schema zum anwenden von xml schemata | |
CN1928816A (zh) | 嵌入式系统软件的模型驱动与构件化开发方法 | |
CN101477462A (zh) | 一种用于动态改变系统行为的模型驱动软件开发方法 | |
JP2007304998A (ja) | ソースコード生成方法及び装置並びにプログラム | |
CN102054043A (zh) | 大数据生成方法和装置 | |
CN101876893A (zh) | Web项目代码自动生成的方法 | |
CN103077038B (zh) | 动态生成和编译.net项目的方法 | |
Śmiałek et al. | Facilitating transition from requirements to code with the ReDSeeDS tool | |
CN106383734A (zh) | 一种从代码中提取详细设计的方法 | |
CN104503767A (zh) | 基于lin协议的代码自动生成系统及方法 | |
CN103677819A (zh) | 基于osgi的代码正向工程的实现方法和实现装置 | |
Savic et al. | Preliminary experience using JetBrains MPS to implement a requirements specification language | |
Micskei et al. | On open source tools for behavioral modeling and analysis with fuml and alf. | |
Jian-li et al. | CAD system design on standard part based on software reuse | |
CN111552459B (zh) | 业务编排流程化管理系统及方法 | |
Nguyen et al. | Agile development of platform independent model in model driven architecture | |
CN104063232B (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 | ||
CB02 | Change of applicant information |
Address after: 212009 Jiangsu province Zhenjiang new Dingmao Road No. 468 by twelve Gemini building A room 05-2300 Applicant after: Polytron Technologies Inc travel Address before: 212009 Jiangsu province Zhenjiang new Dingmao Road No. 468 by twelve Gemini building A room 05-2300 Applicant before: Science and Technology Co., Ltd. is swum in Jiangsu at once |
|
COR | Change of bibliographic data | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20160113 |