CN102722372A - 一种通过分类配置自动生成代码的方法及系统 - Google Patents
一种通过分类配置自动生成代码的方法及系统 Download PDFInfo
- Publication number
- CN102722372A CN102722372A CN2012101689050A CN201210168905A CN102722372A CN 102722372 A CN102722372 A CN 102722372A CN 2012101689050 A CN2012101689050 A CN 2012101689050A CN 201210168905 A CN201210168905 A CN 201210168905A CN 102722372 A CN102722372 A CN 102722372A
- Authority
- CN
- China
- Prior art keywords
- page
- module
- file
- layer
- content
- 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.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明揭示了一种通过分类配置自动生成代码的方法及系统,所述方法包括如下步骤:将系统菜单、模块、每个模块的功能、每个模块的界面内容定义分类记录在配置信息中。通过将整个系统程序结构中MVC三层结构中的View层和Model层的内容都分离为可以和每个数据库表向对应的文件。设定特别的数据绑定机制,让View层的表现内容和Model层的数据根据配置信息实现自动同步。通过View层和Model层的同步机制,Controller层通过配置信息获取当前模块的各类逻辑操作的必要信息,从而完成公共操作的实现,并且这些Controller被扩展来实现类似逻辑。本发明可根据配置记录自动生成程序代码,大幅减少整个软件开发周期的工作量和开发时间,同时也大幅提高目标系统的质量。
Description
技术领域
本发明属于计算机程序开发技术领域,涉及一种自动生成代码的方法,尤其涉及一种通过分类配置自动生成代码的方法;同时,本发明还涉及一种通过分类配置自动生成代码的系统。
背景技术
在传统软件开发方法中,开发一套信息管理系统,需要通过标准的软件开发生命周期,如典型的瀑布式开发分为以下几个阶段:需求调研、概要设计、详细设计、程序开发、单元测试、集成测试、系统测试等过程才能完成整个信息管理系统的开发。这其中由于项目规模的大小不同,而每个阶段的工作量比重略有不同;一般来说详细设计、程序开发和单元测试的总工作量超过整个生命周期工作量的60%。
但是实际所有基于数据库开发的信息管理系统,80%的界面操作、用户需求都有着高度的类同点。
常见程序都采用MVC结构,MVC是由Model(模型)层、View(视图)、Controller(控制器)层组成。Model(模型)放置业务实体,表示操作数据;View(视图)放置UI模板文件,负责展示输出结果;Controller(控制器)放置Controller类,处理URL请求。
但是由于View和Controller层次的实现的复杂性和不确定性,难以实现根据配置自动生成,生成的代码也难以被组合和扩展。
有鉴于此,如今迫切需要设计一种可以有效降低在完成“详细设计、程序开发、单元测试”等阶段工作量的方法。
发明内容
本发明所要解决的技术问题是:提供一种通过分类配置自动生成代码的方法,可根据配置记录自动生成程序代码,实现整个软件开发流程基本无需详细设计、程序开发和单元测试,大幅减少整个软件开发周期的工作量和开发时间,同时也大幅提高目标系统的质量。
此外,本发明还提供一种通过分类配置自动生成代码的系统,可统一生成所有相关实现代码,生成的代码可集成统一的权限控制框架和其它业务逻辑,并且每个模块支持预设的常见操作功能。
为解决上述技术问题,本发明采用如下技术方案:
一种通过分类配置自动生成代码的方法,所述方法包括如下步骤:
配置信息定义步骤:将系统菜单、模块、每个模块的功能、每个模块的界面内容定义分类记录在配置信息中;
内容分离步骤:MVC三层结构包括视图View层、模型Model层、控制器Controller层,通过将整个系统程序结构中MVC三层结构中的View层和Model层的内容都分离为可以和每个数据库表相对应的文件;
信息自动同步步骤:设定数据绑定机制,让View层的表现内容和Model层的数据根据配置信息实现自动同步;
逻辑操作信息获取步骤:通过View层和Model层的同步机制,Controller层通过配置信息获取当前模块的各类逻辑操作的必要信息,从而完成公共操作的实现,并且这些Controller被扩展来实现类似逻辑;
程序自动生成步骤:让自动生成程序根据配置信息生成目标系统文件,同时生成的程序文件可以被组合应用在各种业务应用场景下。
作为本发明的一种优选方案,内容分离步骤中,将View层和Model层的内容都分离为可以和每个数据库表相对应的文件的流程具体包括:
将View层的涉及的每个数据库表生成对应的页面,包括:查询字段部分页面文件、只读列表部分页面文件、弹出窗口查询字段部分页面文件、弹出窗口只读列表部分页面文件、可编辑列表部分页面文件、可编辑表单部分页面文件、只读表单部分页面文件;所述数据库表包括主表,或者还包括一级或多级子表;
为该模块生成若干个总的操作页面,包括:整个模块的列表页面、整个模块的可编辑页面、整个模块的弹出窗口列表页面;整个模块的列表页面引用主表的查询字段部分页面文件和只读列表部分页面文件;整个模块的可编辑页面引用主表的可编辑表单部分页面文件和所有直接子表的可编辑列表部分页面文件;整个模块的弹出窗口列表页面引用主表的弹出窗口查询字段部分页面文件和弹出窗口只读列表部分页面文件;如果该模块只有主表,没有子表,则无需生成子表相关的内容;
再为该模块的所有子表生成若干可编辑页面,引用该子表的可编辑表单部分页面文件和该子表所有直接子表的可编辑列表部分页面文件;
此外还为每个页面引用到的所有字段名称可以生成对应的资源文件,用于多语言的切换;
将Model层的内容分离为文件的过程采用ORMapping框架实现;
数据库外键统一分为两种:主从表关系,非主从表的代码名称对应关系;外键关系通过ORMapping框架的对象关联来实现。
作为本发明的一种优选方案,所述信息自动同步步骤中设定数据绑定机制的流程包括:
每个页面对应一个当前页面的Page对象,该对象当中可保存所有相关的页面信息、相关数据库对象;
在系统后台逻辑执行完毕后,系统可将该Page对象序列化为一个byte数组,再通过base64编码和zip压缩成一个字符串后放在页面的一个隐含字段中;
当页面提交时候,后台代码可在请求中获取该隐含字段的值,通过反序列化获取该页面提交前的Page对象,再将页面提交的新值和变化附加到该Page对象中,从而在后台代码中始终能够获得页面的所有相关信息,然后可以实现将当前模块相关的数据对象始终保留在Page对象中,并且可以让该数据对象和页面最新内容保持同步;
将页面提交的值附加到Page对象中的对应,通过读取该模块的配置来确定哪些信息需要附加,如何对应附加;
而页面显示时候,让页面每个字段显示Page对象内的对应的对象值,可通过自定义代码直接读取Page对象或者统一将Page对象中的属性值放置在请求request的属性attribute中,从而可以利用已有的第三方类库;
此外在发生异常回滚时候,可以利用原Page对象而返回到页面原始情况;从而实现在任意页面转向中保持界面元素和数据对象的自动无缝绑定。
作为本发明的一种优选方案,所述逻辑操作信息获取步骤中,Controller层通过配置信息获取当前模块的各类逻辑操作的必要信息包括如下步骤:
在所有页面提交中包含以下变量:当前页面的路径、页面对象的序列化字符串、当前菜单编号、当前菜单类型、当前模块的编号、当前主表的表名加主键字段名、当前主表的主键值、当前子表的表名加主键字段名、当前子表的主键值原、查询条件对象的序列化字符串;
根据页面表单提交的当前模块编号定义字段的值来从配置中获得当前模块对应的数据库对象,从而在查询操作中可动态拼接数据库SQL语句,在保存操作中,通过当前模块的字段定义配置,动态的将页面表单内容附加到数据库对象中,完成数据库操作;数据库事务控制可通过程序运行容器、第三方类库或者数据库自身提供的机制实现。
作为本发明的一种优选方案,所述逻辑操作信息获取步骤中,Controller被扩展来实现类似逻辑的流程包括如下步骤:
在Controller层次,使用面向切面编程AOP来实现对每个Controller的拦截来附加商业逻辑;或者,所有Controller继承祖先类,在祖先类中实现Controller自身逻辑实现的拦截;或者,通过组合Controller的不同数据库对象的新增、删除、修改、查询的逻辑,来实现需要的扩展的业务逻辑;
在View层次,大部分扩展逻辑可在页面逻辑扩展目录下的页面中增加,或者直接修改生成页面目录下面的页面;
权限系统采用权限、角色、角色所属权限、用户、用户所属角色表结构;
系统菜单使用典型的顶部下拉式菜单,或者采用右侧可收缩树形菜单,或者采用图标导航方式;
权限系统和系统菜单都属于一次性代码,可重复使用;权限控制通过Filter或面向切面编程AOP来实现,并且利用每个模块的当前模块菜单编号传参来判断;系统菜单通过将每个具体模块放置在内置页面容器,如iframe中来实现和每个具体模块集成使用。
作为本发明的一种优选方案,所述程序自动生成步骤中,自动生成程序根据配置信息生成目标系统文件的流程包括:通过配置信息定义步骤设定的配置信息,按照如下顺序,为每个模块逐步生成下列文件:
每个模块对应的数据库表结构;
每个模块的数据库对象配置;
每个模块的数据库对象;
每个模块的所有操作功能对应的Controller代码;
每个模块的每张表对应的只读列表内容,可编辑列表内容,搜索条件表单内容,可编辑表单内容,只读表单内容页面;
每个模块的每张表的特殊逻辑附加页面;
每个模块的每张表的字段验证代码页面;
每个模块的列表页面;
每个模块的编辑页面;
每个模块的弹出窗口用的列表页面。
作为本发明的一种优选方案,所述公共操作包括搜索、新增、修改、保存、删除、批量删除中的一种或多种。
一种通过分类配置自动生成代码的系统,所述系统包括:
配置信息定义单元,用以将系统菜单、模块、每个模块的功能、每个模块的界面内容定义分类记录在配置信息中;
内容分离单元,MVC三层结构包括视图View层、模型Model层、控制器Controller层,所述内容分离模块通过将整个系统程序结构中MVC三层结构中的View层和Model层的内容都分离为可以和每个数据库表向对应的文件;
信息自动同步单元,用以设定特别的数据绑定机制,让View层的表现内容和Model层的数据根据配置信息实现自动同步;
逻辑操作信息获取单元,用以通过View层和Model层的同步机制,Controller层通过配置信息获取当前模块的各类逻辑操作的必要信息,从而完成公共操作的实现,并且这些Controller被扩展来实现类似逻辑;
程序自动生成单元,用以根据配置信息生成目标系统文件,同时生成的程序文件可被组合应用在各种业务应用场景下。
作为本发明的一种优选方案,所述公共操作包括搜索、新增、修改、保存、删除、批量删除中的一种或多种。
本发明的有益效果在于:本发明提出的通过分类配置自动生成代码的方法及系统,通过分类记录各用户的需求,通过将用户需求形成规范的配置记录,再通过配置记录,利用统一的程序生成可运行的、满足用户需求的信息管理系统和相关可扩展程序代码,从而实现整个软件开发流程基本无需详细设计、程序开发和单元测试,大幅减少整个软件开发周期的工作量和开发时间,同时也大幅提高目标系统的质量。
附图说明
图1为本发明通过分类配置自动生成代码方法的流程图。
具体实施方式
下面结合附图详细说明本发明的优选实施例。
实施例一
本发明提供一种通过分类配置自动生成代码的方法及系统,帮助软件开发人员摆脱重复劳动,将80%的典型逻辑交给工具生成的代码处理,而将有限的时间精力集中20%真正特别的商业逻辑中。
本实施例以使用J2EE技术实现B/S结构的信息管理系统为例介绍本发明方法。技术环境如下:使用spring作为MVC框架;使用hibernate作为数据库ORMapping工具;数据库可以任意选择hibernate支持的数据库即可。
请参阅图1,本发明揭示了一种通过分类配置自动生成代码的方法,所述方法包括如下步骤:
【配置信息定义步骤】
将系统菜单、模块、每个模块的功能、每个模块的界面内容定义分类记录在配置信息中。该步骤通过配置信息定义单元实现。
配置信息具体内容可包括:
1.定义目标系统的菜单结构
2.定义目标系统的每个菜单对应的模块
3.定义每个模块的可操作功能,如常见操作功能有:搜索、新增、修改、保存、删除、批量删除、导入、导出
4.定义每个模块的界面类型和操作风格(具体界面类型和操作风格分类见“具体实施方式”中的说明)
5.定义每个模块的界面内容
A.包含数据项分类,对应数据库表、每个表的唯一约束定义
B.每个数据项的具体属性:
◆输入字段名称
◆类型
◆长度
◆精度
◆输入形式(普通输入、radiobox、checkbox、下拉框、弹出选择窗口)
◆默认值
◆是否必填
◆字段在不同界面中的排序顺序
◆字段在不同界面中的排列方式
◆是否需要作为查询条件
◆是否外键关联字段;如果是外键关联字段,需要标志关联的模块、表、字段、显示字段信息
◆是否是主键
【内容分离步骤】
MVC三层结构包括视图View层、模型Model层、控制器Controller层,通过将整个系统程序结构中MVC三层结构中的View层和Model层的内容都分离为可以和每个数据库表相对应的文件。该步骤通过内容分离单元实现。内容分离步骤具体包括:
(1)将View层的涉及的每个数据库表生成对应的如下页面:
√查询字段部分页面文件
√只读列表部分页面文件
√弹出窗口查询字段部分页面文件
√弹出窗口只读列表部分页面文件
√可编辑列表部分页面文件
√可编辑表单部分页面文件
√只读表单部分页面文件
(2)为该模块生成几个总的操作页面如下:
√整个模块的列表页面(引用前面步骤中的主表的查询字段部分页面文件和只读列表部分页面文件)
√整个模块的可编辑页面(引用前面步骤中的主表的可编辑表单部分页面文件和所有直接子表的可编辑列表部分页面文件)
√整个模块的弹出窗口列表页面(引用前面步骤中的主表的弹出窗口查询字段部分页面文件和弹出窗口只读列表部分页面文件)
(3)再为该模块的所有子表生成可编辑页面。(引用前面步骤中的该子表的可编辑表单部分页面文件和该子表所有直接子表的可编辑列表部分页面文件)
(4)此外还为每个页面引用到的所有字段名称可以生成对应的资源文件,用于多语言的切换。
如果该模块只有主表,没有子表(即从表),则无需生成子表相关的内容。
具体每个表对应的列表和表单页面的代码实现逻辑参见“数据绑定机制”。
以下以具有两个表的一个主从表模块作为例子,具体包含的页面如表1、表2所示。
表1生成的页面及对应文件名
表2生成的页面及对应文件名
生成页面的表现形式如下:
√操作功能:使用按钮或超链接。
√界面子内容块:
只读列表
可编辑列表
√界面内容:界面具体内容都可以通过以下界面子内容块自由拼装,再结合标签页、按钮条等界面区域分割方式来组织。典型界面如下:
Model层可采用目前流行的ORMapping框架都可以实现,如使用hibernate框架,通过hibernate对象实现,为每个模块生成一个hibernate配置。
数据库外键统一分为两种:主从表关系,非主从表的代码名称对应关系。外键关系可以通过hibernate的对象关联来实现。
【信息自动同步步骤】
设定数据绑定机制,让View层的表现内容和Model层的数据根据配置信息实现自动同步。该步骤通过信息自动同步单元实现。设定的数据绑定机制流程包括:
每个页面对应一个当前页面的Page对象,该对象当中可保存所有相关的页面信息、相关数据库对象。
在系统后台逻辑执行完毕后,系统可将该Page对象序列化为一个byte数组,再通过base64编码和zip压缩成一个字符串后放在页面的一个隐含字段中。
当页面提交时候,后台代码可在请求中获取该隐含字段的值,通过反序列化获取该页面提交前的Page对象,再将页面提交的新值和变化附加到该Page对象中,从而在后台代码中始终能够获得页面的所有相关信息,然后可以实现将当前模块相关的数据对象始终保留在Page对象中,并且可以让该数据对象和页面最新内容保持同步。
将页面提交的值附加到Page对象中的对应,可以通过读取该模块的配置来确定哪些信息需要附加,如何对应附加。
而页面显示时候,可以让页面每个字段显示Page对象内的对应的对象值,可通过自定义代码,如Java中自定义标记库Taglib直接读取Page对象或者统一将Page对象中的属性值放置在请求request的属性attribute中,从而可以利用已有的第三方类库,如JSTL之类的类库来实现该逻辑。
此外在发生异常回滚时候,可以利用原Page对象而返回到页面原始情况。从而实现在任意页面转向中保持界面元素和数据对象的自动无缝绑定。
【逻辑操作信息获取步骤】
通过View层和Model层的同步机制,Controller层通过配置信息获取当前模块的各类逻辑操作的必要信息,从而完成公共操作的实现,并且这些Controller被扩展来实现类似逻辑。所述公共操作包括搜索、新增、修改、保存、删除、批量删除中的一种或多种。该步骤通过逻辑操作信息获取单元实现。
Controller层公共逻辑实现的方法包括:
在所有页面提交中包含以下变量:当前页面的路径、页面对象的序列化字符串、当前菜单编号、当前菜单类型、当前模块的编号、当前主表的表名加主键字段名、当前主表的主键值、当前子表的表名加主键字段名、当前子表的主键值原、查询条件对象的序列化字符串。
可以根据页面表单提交的当前模块编号定义PAGE.BILLCODE字段的值来从配置中获得当前模块对应的Hibernate对象,从而在查询等操作中可以动态拼接HSQL,在保存等操作中,可以通过实现Spring的属性编辑器将页面表单内容附加到Hibernate对象中,完成数据库操作。数据库事务控制可以通过Spring配置实现。
页面对象和数据库对象绑定、异常处理方法请参看信息自动同步步骤中的“界面元素和数据库对象的自动绑定机制”说明。
Controller被扩展来实现类似逻辑的方法包括:
在Controller层次,可使用spring的AOP来实现对每个Controller的拦截来附加商业逻辑。
替代方案也可以是所有Controller继承祖先类,在祖先类中实现Controller自身逻辑实现的拦截。
此外还可以通过组合Controller的不同数据库对象的新增、删除、修改、查询的逻辑,来实现需要的扩展的业务逻辑。
在View层次,大部分扩展逻辑可以在页面逻辑扩展目录(前面提到的business目录)下的jsp中增加,或者直接修改生成页面目录generate下面的jsp页面。
其它方面,权限系统采用最典型的权限、角色、角色所属权限、用户、用户所属角色表结构。
系统菜单使用典型的顶部下拉式菜单;其它常见方式还有右侧可收缩树形菜单,图标导航方式等。
权限系统和系统菜单都属于一次性代码,可重复使用,这里主要表述集成方法。权限控制可以通过Filter或Spring AOP来实现,并且利用每个模块的PAGE.MENUID传参来判断。系统菜单可通过将每个具体模块放置在iframe中来实现和每个具体模块集成使用。
【程序自动生成步骤】
让自动生成程序根据配置信息生成目标系统文件,同时生成的程序文件可以被组合应用在各种业务应用场景下。该步骤通过程序自动生成单元实现。
自动生成程序根据配置信息生成目标系统文件的流程包括:通过配置信息定义步骤设定的配置信息,按照如下顺序,为每个模块逐步生成下列文件:
每个模块对应的数据库表结构;
每个模块的Hibernate对象配置;
每个模块的Hibernate对象;
每个模块的所有操作功能对应的Controller代码;
每个模块的每张表对应的只读列表内容,可编辑列表内容,搜索条件表单内容,可编辑表单内容,只读表单内容jsp页面;
每个模块的每张表的特殊逻辑附加页面;
每个模块的每张表的Javascript验证代码页面;
每个模块的列表页面;
每个模块的编辑页面;
每个模块的弹出窗口用的列表页面。
以上是本发明揭示的通过分类配置自动生成代码的方法,本发明在揭示上述方法的同时,还揭示一种通过分类配置自动生成代码的系统;所述系统包括:配置信息定义单元、内容分离单元、信息自动同步单元、逻辑操作信息获取单元、程序自动生成单元。
配置信息定义单元用以将系统菜单、模块、每个模块的功能、每个模块的界面内容定义分类记录在配置信息中。具体过程请参阅本发明方法描述中的配置信息定义步骤。
内容分离单元,MVC三层结构包括视图View层、模型Model层、控制器Controller层,所述内容分离模块通过将整个系统程序结构中MVC三层结构中的View层和Model层的内容都分离为可以和每个数据库表向对应的文件。具体过程请参阅本发明方法描述中的内容分离步骤。
信息自动同步单元,用以设定特别的数据绑定机制,让View层的表现内容和Model层的数据根据配置信息实现自动同步。具体过程请参阅本发明方法描述中的信息自动同步步骤。
逻辑操作信息获取单元,用以通过View层和Model层的同步机制,Controller层通过配置信息获取当前模块的各类逻辑操作的必要信息,从而完成公共操作的实现,并且这些Controller被扩展来实现类似逻辑。所述公共操作包括搜索、新增、修改、保存、删除、批量删除中的一种或多种。具体过程请参阅本发明方法描述中的逻辑操作信息获取步骤。
程序自动生成单元,用以根据配置信息生成目标系统文件,同时生成的程序文件可被组合应用在各种业务应用场景下。具体过程请参阅本发明方法描述中的程序自动生成步骤。
综上所述,本发明提出的通过分类配置自动生成代码的方法及系统,通过分类记录各用户的需求,通过将用户需求形成规范的配置记录,再通过配置记录,利用统一的程序生成可运行的、满足用户需求的信息管理系统和相关可扩展程序代码,从而实现整个软件开发流程基本无需详细设计、程序开发和单元测试,大幅减少整个软件开发周期的工作量和开发时间,同时也大幅提高目标系统的质量。
这里本发明的描述和应用是说明性的,并非想将本发明的范围限制在上述实施例中。这里所披露的实施例的变形和改变是可能的,对于那些本领域的普通技术人员来说实施例的替换和等效的各种部件是公知的。本领域技术人员应该清楚的是,在不脱离本发明的精神或本质特征的情况下,本发明可以以其它形式、结构、布置、比例,以及用其它组件、材料和部件来实现。在不脱离本发明范围和精神的情况下,可以对这里所披露的实施例进行其它变形和改变。
Claims (9)
1.一种通过分类配置自动生成代码的方法,其特征在于,所述方法包括如下步骤:
配置信息定义步骤:将系统菜单、模块、每个模块的功能、每个模块的界面内容定义分类记录在配置信息中;
内容分离步骤:MVC三层结构包括视图View层、模型Model层、控制器Controller层,通过将整个系统程序结构中MVC三层结构中的View层和Model层的内容都分离为可以和每个数据库表相对应的文件;
信息自动同步步骤:设定数据绑定机制,让View层的表现内容和Model层的数据根据配置信息实现自动同步;
逻辑操作信息获取步骤:通过View层和Model层的同步机制,Controller层通过配置信息获取当前模块的各类逻辑操作的必要信息,从而完成公共操作的实现,并且这些Controller被扩展来实现类似逻辑;
程序自动生成步骤:让自动生成程序根据配置信息生成目标系统文件,同时生成的程序文件可以被组合应用在各种业务应用场景下。
2.根据权利要求1所述的通过分类配置自动生成代码的方法,其特征在于:
内容分离步骤中,将View层和Model层的内容都分离为可以和每个数据库表相对应的文件的流程具体包括:
将View层的涉及的每个数据库表生成对应的页面,包括:查询字段部分页面文件、只读列表部分页面文件、弹出窗口查询字段部分页面文件、弹出窗口只读列表部分页面文件、可编辑列表部分页面文件、可编辑表单部分页面文件、只读表单部分页面文件;所述数据库表包括主表,或者还包括一级或多级子表;
为该模块生成若干个总的操作页面,包括:整个模块的列表页面、整个模块的可编辑页面、整个模块的弹出窗口列表页面;整个模块的列表页面引用主表的查询字段部分页面文件和只读列表部分页面文件;整个模块的可编辑页面引用主表的可编辑表单部分页面文件和所有直接子表的可编辑列表部分页面文件;整个模块的弹出窗口列表页面引用主表的弹出窗口查询字段部分页面文件和弹出窗口只读列表部分页面文件;如果该模块只有主表,没有子表,则无需生成子表相关的内容;
再为该模块的所有子表生成若干可编辑页面,引用该子表的可编辑表单部分页面文件和该子表所有直接子表的可编辑列表部分页面文件;
此外还为每个页面引用到的所有字段名称可以生成对应的资源文件,用于多语言的切换;
将Model层的内容分离为文件的过程采用ORMapping框架实现;
数据库外键统一分为两种:主从表关系,非主从表的代码名称对应关系;外键关系通过ORMapping框架的对象关联来实现。
3.根据权利要求1所述的通过分类配置自动生成代码的方法,其特征在于:
所述信息自动同步步骤中设定数据绑定机制的流程包括:
每个页面对应一个当前页面的Page对象,该对象当中可保存所有相关的页面信息、相关数据库对象;
在系统后台逻辑执行完毕后,系统可将该Page对象序列化为一个byte数组,再通过base64编码和zip压缩成一个字符串后放在页面的一个隐含字段中;
当页面提交时候,后台代码可在请求中获取该隐含字段的值,通过反序列化获取该页面提交前的Page对象,再将页面提交的新值和变化附加到该Page对象中,从而在后台代码中始终能够获得页面的所有相关信息,然后可以实现将当前模块相关的数据对象始终保留在Page对象中,并且可以让该数据对象和页面最新内容保持同步;
将页面提交的值附加到Page对象中的对应,通过读取该模块的配置来确定哪些信息需要附加,如何对应附加;
而页面显示时候,让页面每个字段显示Page对象内的对应的对象值,可通过自定义代码直接读取Page对象或者统一将Page对象中的属性值放置在请求request的属性attribute中,从而可以利用已有的第三方类库;
此外在发生异常回滚时候,可以利用原Page对象而返回到页面原始情况;从而实现在任意页面转向中保持界面元素和数据对象的自动无缝绑定。
4.根据权利要求1所述的通过分类配置自动生成代码的方法,其特征在于:
所述逻辑操作信息获取步骤中,Controller层通过配置信息获取当前模块的各类逻辑操作的必要信息包括如下步骤:
在所有页面提交中包含以下变量:当前页面的路径、页面对象的序列化字符串、当前菜单编号、当前菜单类型、当前模块的编号、当前主表的表名加主键字段名、当前主表的主键值、当前子表的表名加主键字段名、当前子表的主键值原、查询条件对象的序列化字符串;
根据页面表单提交的当前模块编号定义字段的值来从配置中获得当前模块对应的数据库对象,从而在查询操作中可动态拼接数据库SQL语句,在保存操作中,通过当前模块的字段定义配置,动态的将页面表单内容附加到数据库对象中,完成数据库操作;数据库事务控制可通过程序运行容器、第三方类库或者数据库自身提供的机制实现。
5.根据权利要求1所述的通过分类配置自动生成代码的方法,其特征在于:
所述逻辑操作信息获取步骤中,Controller被扩展来实现类似逻辑的流程包括如下步骤:
在Controller层次,使用面向切面编程AOP来实现对每个Controller的拦截来附加商业逻辑;或者通过所有Controller继承祖先类,在祖先类中实现Controller自身逻辑实现的拦截;或者,通过组合Controller的不同数据库对象的新增、删除、修改、查询的逻辑,来实现需要的扩展的业务逻辑;
在View层次,大部分扩展逻辑可在页面逻辑扩展目录下的页面中增加,或者直接修改生成页面目录下面的页面;
权限系统采用权限、角色、角色所属权限、用户、用户所属角色表结构;
系统菜单使用典型的顶部下拉式菜单,或者采用右侧可收缩树形菜单,或者采用图标导航方式;
权限系统和系统菜单都属于一次性代码,可重复使用;权限控制通过Filter或面向切面编程AOP来实现,并且利用每个模块的当前模块菜单编号传参来判断;系统菜单通过将每个具体模块放置在内置页面容器中来实现和每个具体模块集成使用。
6.根据权利要求1所述的通过分类配置自动生成代码的方法,其特征在于:
所述程序自动生成步骤中,自动生成程序根据配置信息生成目标系统文件的流程包括:通过配置信息定义步骤设定的配置信息,按照如下顺序,为每个模块逐步生成下列文件:
每个模块对应的数据库表结构;
每个模块的数据库对象配置;
每个模块的数据库对象;
每个模块的所有操作功能对应的Controller代码;
每个模块的每张表对应的只读列表内容,可编辑列表内容,搜索条件表单内容,可编辑表单内容,只读表单内容页面;
每个模块的每张表的特殊逻辑附加页面;
每个模块的每张表的字段验证代码页面;
每个模块的列表页面;
每个模块的编辑页面;
每个模块的弹出窗口用的列表页面。
7.根据权利要求1所述的通过分类配置自动生成代码的方法,其特征在于:
所述公共操作包括搜索、新增、修改、保存、删除、批量删除中的一种或多种。
8.一种通过分类配置自动生成代码的系统,其特征在于,所述系统包括:
配置信息定义单元,用以将系统菜单、模块、每个模块的功能、每个模块的界面内容定义分类记录在配置信息中;
内容分离单元,MVC三层结构包括视图View层、模型Model层、控制器Controller层,所述内容分离模块通过将整个系统程序结构中MVC三层结构中的View层和Model层的内容都分离为可以和每个数据库表向对应的文件;
信息自动同步单元,用以设定特别的数据绑定机制,让View层的表现内容和Model层的数据根据配置信息实现自动同步;
逻辑操作信息获取单元,用以通过View层和Model层的同步机制,Controller层通过配置信息获取当前模块的各类逻辑操作的必要信息,从而完成公共操作的实现,并且这些Controller被扩展来实现类似逻辑;
程序自动生成单元,用以根据配置信息生成目标系统文件,同时生成的程序文件可被组合应用在各种业务应用场景下。
9.根据权利要求8所述的通过分类配置自动生成代码的系统,其特征在于:
所述公共操作包括搜索、新增、修改、保存、删除、批量删除中的一种或多种。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210168905.0A CN102722372B (zh) | 2012-05-25 | 2012-05-25 | 一种通过分类配置自动生成代码的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210168905.0A CN102722372B (zh) | 2012-05-25 | 2012-05-25 | 一种通过分类配置自动生成代码的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102722372A true CN102722372A (zh) | 2012-10-10 |
CN102722372B CN102722372B (zh) | 2015-04-22 |
Family
ID=46948152
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210168905.0A Expired - Fee Related CN102722372B (zh) | 2012-05-25 | 2012-05-25 | 一种通过分类配置自动生成代码的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102722372B (zh) |
Cited By (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102999575A (zh) * | 2012-11-12 | 2013-03-27 | 北京华通伟业科技发展有限公司 | 一种Hibernate映射配置文件的配置方法及系统 |
CN104102479A (zh) * | 2013-04-10 | 2014-10-15 | 北汽福田汽车股份有限公司 | 一种obd变量定义源文件的自动生成方法 |
CN104111826A (zh) * | 2013-04-19 | 2014-10-22 | 杭州新世纪电子科技有限公司 | 一种软件项目开发方法及装置 |
CN104615431A (zh) * | 2015-02-05 | 2015-05-13 | 浪潮集团有限公司 | 一种Web应用的实现方法和装置 |
CN105404508A (zh) * | 2015-11-05 | 2016-03-16 | 浪潮(北京)电子信息产业有限公司 | 一种管理界面多语言的支持方法、装置及终端 |
CN106775770A (zh) * | 2017-01-16 | 2017-05-31 | 兴唐通信科技有限公司 | 基于类信息构建查询语句的查找方法 |
CN106775694A (zh) * | 2016-12-08 | 2017-05-31 | 中国科学院软件研究所 | 一种软件配置代码制品的层次分类方法 |
CN106919390A (zh) * | 2017-02-27 | 2017-07-04 | 上海上讯信息技术股份有限公司 | 一种页面生成的方法与设备 |
CN107133041A (zh) * | 2017-05-02 | 2017-09-05 | 武汉斗鱼网络科技有限公司 | 数据通知方法及装置 |
CN107145357A (zh) * | 2017-05-09 | 2017-09-08 | 武汉斗鱼网络科技有限公司 | 页面逻辑控制方法及装置 |
CN107273116A (zh) * | 2017-05-22 | 2017-10-20 | 互联天下科技发展(深圳)有限公司 | 采用基于框架的代码生成工具生产代码的方法 |
CN103870285B (zh) * | 2014-04-02 | 2017-10-27 | 成都西山居互动娱乐科技有限公司 | 进行逻辑流程控制的链式状态转换方法 |
CN107391123A (zh) * | 2017-07-01 | 2017-11-24 | 广东电网有限责任公司信息中心 | 一种自助设计表单和流程业务补充系统的方法 |
CN107908429A (zh) * | 2017-08-10 | 2018-04-13 | 广州真诺电子科技有限公司 | 应用于机器人软件工程师的人机交互与编程系统 |
CN108089904A (zh) * | 2017-12-21 | 2018-05-29 | 上海新案数字科技有限公司 | 一种展示页面扩展方法及设备 |
CN108846101A (zh) * | 2018-06-19 | 2018-11-20 | 艾普阳科技(深圳)有限公司 | 一种自动生成sql语句的方法和装置 |
CN108984653A (zh) * | 2018-06-27 | 2018-12-11 | 广州市南方人力资源评价中心有限公司 | 一种实现多系统在线开发管理的方法 |
CN109117133A (zh) * | 2018-07-04 | 2019-01-01 | 广州视源电子科技股份有限公司 | 菜单的配置方法、装置、电子设备及可读存储介质 |
CN109408035A (zh) * | 2018-09-05 | 2019-03-01 | 平安科技(深圳)有限公司 | 一种业务系统的流程配置方法、存储介质和服务器 |
CN109445339A (zh) * | 2018-10-31 | 2019-03-08 | 上海置信电气股份有限公司 | Ftu控制器配置方法、装置及系统、电子设备 |
CN109669680A (zh) * | 2017-10-16 | 2019-04-23 | 阿里巴巴集团控股有限公司 | 网页模块的开发处理方法、装置及电子设备 |
CN109739643A (zh) * | 2018-12-18 | 2019-05-10 | 南京宽慧无线网络通信有限公司 | 一种基于mvc框架模式资源调度平台系统 |
CN110419024A (zh) * | 2017-03-14 | 2019-11-05 | 西安姆贝拉有限公司 | 用于在开发环境中自动生成和合并代码的方法和设备 |
CN110633078A (zh) * | 2019-09-20 | 2019-12-31 | 第四范式(北京)技术有限公司 | 一种实现自动生成特征计算代码的方法及装置 |
CN110780863A (zh) * | 2019-10-25 | 2020-02-11 | 苏州浪潮智能科技有限公司 | 一种存储系统的跨平台开发方法、装置、设备及介质 |
CN111273902A (zh) * | 2018-12-05 | 2020-06-12 | 深圳市茁壮网络股份有限公司 | 一种项目、目录架构生成方法及装置 |
CN111679826A (zh) * | 2020-04-27 | 2020-09-18 | 平安国际智慧城市科技股份有限公司 | 实时预览网页编辑内容的方法、装置、设备及存储介质 |
CN111813435A (zh) * | 2019-04-11 | 2020-10-23 | 天津五八到家科技有限公司 | 页面内容配置方法、装置及电子设备 |
CN112181483A (zh) * | 2020-09-30 | 2021-01-05 | 中国科学院合肥物质科学研究院 | 等离子体控制系统软件开发平台及方法 |
CN113094125A (zh) * | 2021-04-21 | 2021-07-09 | 矢量云科信息科技(无锡)有限公司 | 业务流程处理方法、装置、服务器及存储介质 |
CN118051687A (zh) * | 2024-04-16 | 2024-05-17 | 太平金融科技服务(上海)有限公司 | 页面响应方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1834906A (zh) * | 2005-03-15 | 2006-09-20 | 微软公司 | 丰富数据绑定应用程序 |
CN101114226A (zh) * | 2007-08-28 | 2008-01-30 | 北京中企开源信息技术有限公司 | 一种基于模型组件的代码自动生成装置、系统及方法 |
CN101645010A (zh) * | 2009-08-20 | 2010-02-10 | 深圳市珍爱网信息技术有限公司 | 代码自动生成系统及方法 |
-
2012
- 2012-05-25 CN CN201210168905.0A patent/CN102722372B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1834906A (zh) * | 2005-03-15 | 2006-09-20 | 微软公司 | 丰富数据绑定应用程序 |
CN101114226A (zh) * | 2007-08-28 | 2008-01-30 | 北京中企开源信息技术有限公司 | 一种基于模型组件的代码自动生成装置、系统及方法 |
CN101645010A (zh) * | 2009-08-20 | 2010-02-10 | 深圳市珍爱网信息技术有限公司 | 代码自动生成系统及方法 |
Cited By (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102999575B (zh) * | 2012-11-12 | 2015-10-14 | 北京华通伟业科技发展有限公司 | 一种Hibernate映射配置文件的配置方法及系统 |
CN102999575A (zh) * | 2012-11-12 | 2013-03-27 | 北京华通伟业科技发展有限公司 | 一种Hibernate映射配置文件的配置方法及系统 |
CN104102479B (zh) * | 2013-04-10 | 2017-09-15 | 北汽福田汽车股份有限公司 | 一种obd变量定义源文件的自动生成方法 |
CN104102479A (zh) * | 2013-04-10 | 2014-10-15 | 北汽福田汽车股份有限公司 | 一种obd变量定义源文件的自动生成方法 |
CN104111826A (zh) * | 2013-04-19 | 2014-10-22 | 杭州新世纪电子科技有限公司 | 一种软件项目开发方法及装置 |
CN104111826B (zh) * | 2013-04-19 | 2017-07-04 | 杭州新世纪电子科技有限公司 | 一种软件项目开发方法及装置 |
CN103870285B (zh) * | 2014-04-02 | 2017-10-27 | 成都西山居互动娱乐科技有限公司 | 进行逻辑流程控制的链式状态转换方法 |
CN104615431A (zh) * | 2015-02-05 | 2015-05-13 | 浪潮集团有限公司 | 一种Web应用的实现方法和装置 |
CN105404508A (zh) * | 2015-11-05 | 2016-03-16 | 浪潮(北京)电子信息产业有限公司 | 一种管理界面多语言的支持方法、装置及终端 |
CN106775694A (zh) * | 2016-12-08 | 2017-05-31 | 中国科学院软件研究所 | 一种软件配置代码制品的层次分类方法 |
CN106775694B (zh) * | 2016-12-08 | 2019-10-25 | 中国科学院软件研究所 | 一种软件配置代码制品的层次分类方法 |
CN106775770A (zh) * | 2017-01-16 | 2017-05-31 | 兴唐通信科技有限公司 | 基于类信息构建查询语句的查找方法 |
CN106775770B (zh) * | 2017-01-16 | 2020-08-11 | 兴唐通信科技有限公司 | 基于类信息构建查询语句的查找方法 |
CN106919390A (zh) * | 2017-02-27 | 2017-07-04 | 上海上讯信息技术股份有限公司 | 一种页面生成的方法与设备 |
CN110419024A (zh) * | 2017-03-14 | 2019-11-05 | 西安姆贝拉有限公司 | 用于在开发环境中自动生成和合并代码的方法和设备 |
CN107133041A (zh) * | 2017-05-02 | 2017-09-05 | 武汉斗鱼网络科技有限公司 | 数据通知方法及装置 |
CN107145357B (zh) * | 2017-05-09 | 2019-04-05 | 武汉斗鱼网络科技有限公司 | 页面逻辑控制方法及装置 |
CN107145357A (zh) * | 2017-05-09 | 2017-09-08 | 武汉斗鱼网络科技有限公司 | 页面逻辑控制方法及装置 |
CN107273116B (zh) * | 2017-05-22 | 2020-09-25 | 互联天下科技发展(深圳)有限公司 | 采用基于框架的代码生成工具生产代码的方法 |
CN107273116A (zh) * | 2017-05-22 | 2017-10-20 | 互联天下科技发展(深圳)有限公司 | 采用基于框架的代码生成工具生产代码的方法 |
CN107391123A (zh) * | 2017-07-01 | 2017-11-24 | 广东电网有限责任公司信息中心 | 一种自助设计表单和流程业务补充系统的方法 |
CN107908429A (zh) * | 2017-08-10 | 2018-04-13 | 广州真诺电子科技有限公司 | 应用于机器人软件工程师的人机交互与编程系统 |
CN109669680A (zh) * | 2017-10-16 | 2019-04-23 | 阿里巴巴集团控股有限公司 | 网页模块的开发处理方法、装置及电子设备 |
CN108089904A (zh) * | 2017-12-21 | 2018-05-29 | 上海新案数字科技有限公司 | 一种展示页面扩展方法及设备 |
CN108089904B (zh) * | 2017-12-21 | 2021-11-16 | 上海七十迈数字科技有限公司 | 一种展示页面扩展方法及设备 |
CN108846101B (zh) * | 2018-06-19 | 2021-06-22 | 艾普阳科技(深圳)有限公司 | 一种自动生成sql语句的方法和装置 |
CN108846101A (zh) * | 2018-06-19 | 2018-11-20 | 艾普阳科技(深圳)有限公司 | 一种自动生成sql语句的方法和装置 |
CN108984653A (zh) * | 2018-06-27 | 2018-12-11 | 广州市南方人力资源评价中心有限公司 | 一种实现多系统在线开发管理的方法 |
CN109117133A (zh) * | 2018-07-04 | 2019-01-01 | 广州视源电子科技股份有限公司 | 菜单的配置方法、装置、电子设备及可读存储介质 |
CN109408035A (zh) * | 2018-09-05 | 2019-03-01 | 平安科技(深圳)有限公司 | 一种业务系统的流程配置方法、存储介质和服务器 |
CN109445339B (zh) * | 2018-10-31 | 2020-12-11 | 上海置信智能电气有限公司 | Ftu控制器配置方法、装置及系统、电子设备 |
CN109445339A (zh) * | 2018-10-31 | 2019-03-08 | 上海置信电气股份有限公司 | Ftu控制器配置方法、装置及系统、电子设备 |
CN111273902B (zh) * | 2018-12-05 | 2024-04-26 | 深圳市茁壮网络股份有限公司 | 一种项目、目录架构生成方法及装置 |
CN111273902A (zh) * | 2018-12-05 | 2020-06-12 | 深圳市茁壮网络股份有限公司 | 一种项目、目录架构生成方法及装置 |
CN109739643A (zh) * | 2018-12-18 | 2019-05-10 | 南京宽慧无线网络通信有限公司 | 一种基于mvc框架模式资源调度平台系统 |
CN111813435A (zh) * | 2019-04-11 | 2020-10-23 | 天津五八到家科技有限公司 | 页面内容配置方法、装置及电子设备 |
CN110633078A (zh) * | 2019-09-20 | 2019-12-31 | 第四范式(北京)技术有限公司 | 一种实现自动生成特征计算代码的方法及装置 |
CN110780863A (zh) * | 2019-10-25 | 2020-02-11 | 苏州浪潮智能科技有限公司 | 一种存储系统的跨平台开发方法、装置、设备及介质 |
CN111679826A (zh) * | 2020-04-27 | 2020-09-18 | 平安国际智慧城市科技股份有限公司 | 实时预览网页编辑内容的方法、装置、设备及存储介质 |
CN111679826B (zh) * | 2020-04-27 | 2024-04-05 | 深圳赛安特技术服务有限公司 | 实时预览网页编辑内容的方法、装置、设备及存储介质 |
CN112181483A (zh) * | 2020-09-30 | 2021-01-05 | 中国科学院合肥物质科学研究院 | 等离子体控制系统软件开发平台及方法 |
CN112181483B (zh) * | 2020-09-30 | 2023-12-26 | 中国科学院合肥物质科学研究院 | 等离子体控制系统软件开发平台及方法 |
CN113094125A (zh) * | 2021-04-21 | 2021-07-09 | 矢量云科信息科技(无锡)有限公司 | 业务流程处理方法、装置、服务器及存储介质 |
CN113094125B (zh) * | 2021-04-21 | 2023-12-22 | 上海弹业信息科技有限公司 | 业务流程处理方法、装置、服务器及存储介质 |
CN118051687A (zh) * | 2024-04-16 | 2024-05-17 | 太平金融科技服务(上海)有限公司 | 页面响应方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN102722372B (zh) | 2015-04-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102722372B (zh) | 一种通过分类配置自动生成代码的方法及系统 | |
US10606573B2 (en) | System and method for computer language migration using a re-architecture tool for decomposing a legacy system and recomposing a modernized system | |
CN114035773B (zh) | 一种基于配置的低代码开发表单方法、系统及装置 | |
CN100498763C (zh) | 一种使用应用程序处理数据的方法 | |
RU2536390C2 (ru) | Способ для автоматизированного создания отчетов | |
CN101706720B (zh) | 一种运行时根据用户自定义信息进行界面展示方法 | |
US20140317594A1 (en) | System and method for automatically forming human-machine interface | |
CN102426582B (zh) | 数据操作管理装置和数据操作管理方法 | |
CN105487864A (zh) | 代码自动生成的方法和装置 | |
CN102360296A (zh) | 一种基于web的在线表单开发工具 | |
CN102012945B (zh) | 一种面向用户的数据库管理系统 | |
CN104317587A (zh) | 面向安卓移动设备的程序自动生成方法 | |
CN106775770A (zh) | 基于类信息构建查询语句的查找方法 | |
CN101788994A (zh) | 一种数据展示模型建立方法、数据展示方法及装置 | |
CN103810152A (zh) | 可视化公式编辑器 | |
CN103186632A (zh) | 一种运维表单定制的方法及装置 | |
CN104424522B (zh) | 一种业务处理系统及其配置方法 | |
CN105183450A (zh) | 一种前后台分离的电子政务表单模型配置化系统 | |
CN102117202A (zh) | 基于j2ee架构的代码生成装置 | |
KR20180091838A (ko) | 페이지 구축 방법, 단말기, 컴퓨터 판독 가능 저장 매체 및 페이지 구축기기 | |
CN110543303A (zh) | 一种可视化业务平台 | |
CN104424265A (zh) | 数字资源管理方法及系统 | |
CN104615431A (zh) | 一种Web应用的实现方法和装置 | |
CN102156640A (zh) | 一种数据操作代码生成方法 | |
CN103914290A (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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150422 Termination date: 20170525 |