CN113448552A - 代码生成方法和装置 - Google Patents

代码生成方法和装置 Download PDF

Info

Publication number
CN113448552A
CN113448552A CN202010230971.0A CN202010230971A CN113448552A CN 113448552 A CN113448552 A CN 113448552A CN 202010230971 A CN202010230971 A CN 202010230971A CN 113448552 A CN113448552 A CN 113448552A
Authority
CN
China
Prior art keywords
component
data
components
attribute
configuration file
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
Application number
CN202010230971.0A
Other languages
English (en)
Inventor
刘卫程
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Century Trading Co Ltd
Beijing Wodong Tianjun Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Wodong Tianjun Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Century Trading Co Ltd, Beijing Wodong Tianjun Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN202010230971.0A priority Critical patent/CN113448552A/zh
Publication of CN113448552A publication Critical patent/CN113448552A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种代码生成方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:获取处在预设的组件操作区域的多个组件的属性配置数据以及所述多个组件之间的位置关系;其中,所述多个组件中的任一组件为预先封装并具有至少一个可配置属性;根据所述属性配置数据和所述位置关系生成配置文件;解析所述配置文件,得到所述多个组件的属性数据和组件关系数据;将得到的属性数据和组件关系数据输入预设模板从而生成目标代码。该实施方式能够对程序代码中经常使用的功能进行组件化封装,并基于组件的属性配置数据和组件之间的位置关系自动生成目标代码。

Description

代码生成方法和装置
技术领域
本发明涉及计算机技术领域,尤其涉及代码生成方法和装置。
背景技术
在现有Web(互联网)前端、后端开发过程中,大量前端、后端的程序代码需要开发人员手动编写。例如在Web前端开发过程中需要开发大量的前端页面,这些页面主要由表单、表格等元素组成,需要编写的页面代码可以分为表单、表格等元素的固有代码和业务逻辑代码,目前,上述固有代码和业务逻辑代码一般都需要开发人员手动编写。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
1.现有技术中,开发人员往往需要重复编写具有具有类似结构的程序代码,并且需要手动编写固有代码和业务逻辑代码,使得开发效率较低。特别是在代码编写量大、覆盖项目多时更为明显。
2.由于目前程序代码主要依靠开发人员手动编写,因此完成的代码往往不太规范,出错率高。
3.实际应用中,大量程序代码包含类似功能,例如大量的前端页面都包含表单、表格等功能,现有技术没有对以上功能进行组件化封装,导致程序代码编写时无法对以上功能进行复用。
发明内容
有鉴于此,本发明实施例提供一种代码生成方法和装置,能够对程序代码中经常使用的功能进行组件化封装,并基于组件的属性配置数据和组件之间的位置关系自动生成目标代码。
为实现上述目的,根据本发明的一个方面,提供了一种代码生成方法。
本发明实施例的代码生成方法包括:获取处在预设的组件操作区域的多个组件的属性配置数据以及所述多个组件之间的位置关系;其中,所述多个组件中的任一组件为预先封装并具有至少一个可配置属性;根据所述属性配置数据和所述位置关系生成配置文件;解析所述配置文件,得到所述多个组件的属性数据和组件关系数据;将得到的属性数据和组件关系数据输入预设模板从而生成目标代码。
可选地,所述多个组件的属性数据和组件关系数据都为键值对数据;以及,将得到的属性数据和组件关系数据输入预设模板从而生成目标代码,包括:将所述多个组件的属性数据和组件关系数据中的键提取为全局变量;使用所述多个组件的属性数据和组件关系数据中的值替换所述预设模板中的相应占位符从而生成目标代码。
可选地,在解析所述配置文件之前,所述方法还包括:校验所述配置文件中的数据格式是否符合预设协议;校验所述配置文件中的属性数据是否符合预设数据类型。
可选地,所述多个组件之间的位置关系包括层级位置关系和排列位置关系,所述配置文件中的组件关系包括从属关系和先后关系;其中,具有层级位置关系的组件在所述配置文件中具有从属关系,具有任一排列位置关系的组件在所述配置文件中具有与该排列位置关系对应的先后关系。
可选地,在将得到的属性数据和组件关系数据输入预设模板之前,所述方法还包括:在保持所述多个组件之间的从属关系不变的情况下,对同一类型组件的属性数据进行集中排列。
可选地,所述方法还包括:在目标代码的基础上增加业务逻辑代码。
可选地,所述组件操作区域为可视化区域,所述多个组件之间的位置关系由针对所述多个组件的外部操作确定;其中,所述外部操作包括拖拽操作;所述多个组件的属性配置数据通过可视化界面输入;所述多个组件以及所述预设模板都与预先确定的组件框架对应;所述配置文件为JSON格式文件。
为实现上述目的,根据本发明的另一方面,提供了一种基于所述代码生成方法的前端代码生成方法。
可选地,所述组件包括以下至少一种:表单组件、表格组件、列表组件、文本输入组件、单选框组件、复选框组件、下拉列表组件、日期选择组件、数字输入组件、级联选择组件、开关组件、对话组件、图像组件;所述组件对应的组件框架包括以下至少一种:电脑端框架、移动端安卓框架、移动端iOS框架。
为实现上述目的,根据本发明的再一方面,提供了一种基于所述代码生成方法的后端代码生成方法。
可选地,所述组件对应的组件框架包括JAVA框架;所述组件包括以下至少一种:类组件、方法组件、属性组件、入参组件、出参组件、注解组件。
可选地,所述后端代码生成方法分别用于生成控制层的目标代码、服务层的目标代码和数据访问层的目标代码;其中,生成控制层的目标代码时使用第一配置文件和控制层模板,生成服务层的目标代码时使用第二配置文件和服务层模板,生成数据访问层的目标代码时使用第三配置文件和数据访问层模板;控制层模板中预先建立针对服务层模板和/或数据访问层模板的引用关系,服务层模板中预先建立针对数据访问层模板的引用关系。
为实现上述目的,根据本发明的又一方面,提供了一种代码生成装置。
本发明实施例的代码生成装置可以包括:数据获取单元,用于获取处在预设的组件操作区域的多个组件的属性配置数据以及所述多个组件之间的位置关系;其中,所述多个组件中的任一组件为预先封装并具有至少一个可配置属性;配置生成单元,用于根据所述属性配置数据和所述位置关系生成配置文件;解析单元,用于解析所述配置文件,得到所述多个组件的属性数据和组件关系数据;代码生成单元,用于将得到的属性数据和组件关系数据输入预设模板从而生成目标代码。
为实现上述目的,根据本发明的又一方面,提供了一种电子设备。
本发明的一种电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明所提供的代码生成方法。
为实现上述目的,根据本发明的再一方面,提供了一种计算机可读存储介质。
本发明的一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明所提供的代码生成方法。
根据本发明的技术方案,上述发明中的一个实施例具有如下优点或有益效果:预先将程序代码中经常使用的功能进行组件化封装并向用户提供,当用户通过拖拽等方式选择组件、确定组件之间的位置关系并配置组件的属性数据之后,生成相应的配置文件。接着解析配置文件以得到组件的属性数据和组件关系数据,最后将解析得到的属性数据和组件关系数据输入预设模板即可生成目标代码,在目标代码的基础上增加业务逻辑代码即可以完成代码开发工作,实现预设功能需求。通过以上设置,能够实现代码开发过程中经常使用功能的组件化封装以及复用,使现有技术中构成主要工作量的目标代码编写自动完成,开发人员只需编写具体的业务逻辑代码,从而提高代码开发效率。同时,由于通过本发明实施例方法生成的代码根据预先建立的模板、用户通过拖拽等方式形成的组件关系以及用户确定的属性配置数据形成(代码生成过程中可以根据预设规则对属性配置数据进行校验),因此代码较为规范,代码结构较为清晰,出错率极低。此外,本发明实施例提供的代码生成方法能够应用于Web前端、后端的各种框架(例如电脑端、安卓端、iOS端,JAVA端),能够适用于各种编程语言,具有广阔的应用前景。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是本发明第一实施例中前端代码生成方法的执行步骤示意图;
图2是本发明第一实施例中操作组件的相关界面示意图;
图3是本发明第二实施例中后端代码生成方法的执行步骤示意图;
图4是本发明实施例中代码生成方法的主要步骤示意图;
图5是本发明实施例中代码生成方法的具体流程示意图;
图6是本发明实施例中代码生成装置的组成部分示意图;
图7是根据本发明实施例可以应用于其中的示例性系统架构图;
图8是用来实现本发明实施例中代码生成方法的电子设备结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
需要指出的是,在不冲突的情况下,本发明的实施例以及实施例中的技术特征可以相互结合。
图1是本发明第一实施例中前端代码生成方法的执行步骤示意图。在本发明实施例中,前端即Web前端指的是网页端,网页可以是电脑端网页,也可以是移动终端(包括安卓系统的移动终端和iOS系统的移动终端,安卓和iOS均为移动端操作系统)上的Web页面以及App(移动端应用程序)页面。相应地,后端即Web后端指的是服务器端。实际应用中,前端程序开发经常使用的技术有HTML(Hypertext Markup Language,超文本标记语言)、CSS(Cascading Sheets Style,层叠样式表)、Javascript(一种脚本语言)、HTML5(一种互联网标准)等,使用的开发框架有Vue、React(二者均为Javascript框架)等;后端程序开发可以使用JAVA(一种编程语言)等编程语言,使用的框架包括Spring(一种开源的JAVA平台)、Hibernate(一种开源的对象关系映射框架)等。
如图1所示,在本实施例中,前端代码方法可具体按照如下步骤执行:
步骤S101:用户将页面组件拖拽到组件操作区域并确定页面组件之间的位置关系。
在本发明实施例中,开发人员可以对程序代码中经常使用的功能进行二次封装形成组件,并将可配置的属性暴露出来从而让用户(即欲通过操作组件生成相应代码的人员)进行个性化配置。例如,在前端技术领域,开发人员可以将页面中常用的表单、表格、列表等功能封装为表单组件、表格组件、列表组件等页面组件。实际场景中,表格一般具有多列,多应用在电脑端;列表一般具有一列,多应用在移动端(如安卓端、iOS端)。可以理解,具体应用中,开发人员可以根据需要将形成程序代码的任一功能或任何内容封装为组件。例如,可以将一段文字或一幅图像封装为一个组件。在前端技术领域,经常使用的组件可以包括:表单组件(Form)、表格组件(Table)、列表组件(List)、文本输入组件(Input)、单选框组件(Radio)、复选框组件(Checkbox)、下拉列表组件(Select)、日期选择组件(DatePicker)、数字输入组件(InputNumber)、级联选择组件(Cascader)、开关组件(Switch)、对话组件(Dialogue)、图像组件(Image)等。在本发明实施例中,页面组件与组件框架对应,用户在选择页面组件之前首先需要确定组件框架。在前端技术领域,组件框架可以包括电脑端框架、移动端安卓框架、移动端iOS框架,在上述每一种组件框架中还可以继续分为Vue框架(即使用Vue进行开发的框架)和React框架(即使用React进行开发的框架)。
开发人员除了开发各种页面组件之外,还可以向用户提供操作组件的相应界面,以上界面可以通过网页的形式呈现,也可以是应用程序界面。图2是本发明第一实施例中操作组件的相关界面示意图。如图2所示,操作组件的相关界面可以按照以下方式布局:左侧排列的是封装完成的各种页面组件,用户可以通过拖拽等操作将页面组件拖拽到中部区域;中部区域是可视化的组件操作区域,可以实时记录拖拽效果并渲染,从而能够以二维或三维方式显示用户从左侧选择的每一页面组件以及页面组件之间的位置关系;右侧是可视化的属性编辑区域,当用户选中组件操作区域的某一页面组件时,属性编辑区域即会展示该页面组件的各可配置属性,用户可以在相应位置填写各可配置属性的具体数据。可以理解,以上布局仅作为示例,不对操作组件相关界面的显示方式形成限制,同时用户可以通过任何适用方式将页面组件放置到组件操作区域并调整页面组件之间的位置关系,不限于上述拖拽操作。
用户将页面组件拖拽到组件操作区域之后,可以调整各页面组件之间的位置关系。在一些实施例中,上述位置关系包括层级位置关系和排列位置关系,层级位置关系指的是页面组件在Z轴方向的位置关系,排列位置关系指的是页面组件在X轴或Y轴方向的位置关系。需要说明的是,上述X轴、Y轴分别是基于操作组件相关界面建立的直角坐标系的横轴和纵轴,Z轴与操作组件相关界面垂直。层级位置关系可以认为是页面组件之间的上下方位关系(上下方向可以认为与Z轴方向一致),排列位置关系可以认为是页面组件之间的左右方位关系(左右方向可以认为与X轴方向一致)和前后方位关系(前后方向可以认为与Y轴方向一致)。
作为一个优选方案,页面组件之间的层级位置关系可以与页面组件代码之间的从属关系对应,页面组件之间的排列位置关系可以与页面组件代码之间的先后关系对应,上述从属关系和先后关系均属于页面组件的组件关系。这样,用户在操作组件时,可以根据需要实现的组件关系调整组件操作区域中组件的位置关系。特别地,上述从属关系指的是页面组件代码之间的包含关系或者依赖关系,上述先后关系指的是页面组件代码在目标代码文件(目标代码将在下文说明)中所处的先后关系。
实际应用中,可以预先制定更为详细的对应规则,例如,当组件操作区域中A组件处在B组件上方时认为A组件从属于B组件(即A组件依赖于B组件或者B组件包含A组件),当组件操作区域中C组件处在D组件前方或左侧时认为C组件代码先于D组件代码(即目标代码中C组件代码在D组件代码之前)。可以理解,以上对应规则可以根据实际需求灵活设置。
例如,当用户需要在页面中包含一个表单、表单中需要设置一个文本输入框和一个复选框、同时文本输入框代码需要先于复选框代码时,用户可以首先将表单组件拖拽到组件操作区域,接着将文本输入组件和复选框组件拖拽到表单组件上方并使文本输入组件处在复选框组件左侧。用户可以在确定页面组件位置关系之前或之后填写每一页面组件的属性配置数据。一般地,属性配置数据为键值对数据,其中的键为属性名称,值为属性值,属性配置数据可以包括实体数据、样式等各方面的属性数据。例如,对于表单组件来说,其属性配置数据可以包括确认文本(属性名称为confirmText)、重置文本(属性名称为resetText)、标签宽度(label-width)等,对于文本输入组件来说,其属性配置数据可以包括数据类型(属性名称为type)、默认值(属性名称为value)、提示信息(属性名称为placeholder)、最大长度(属性名称为maxlength)、最小长度(属性名称为minlength)等,对于复选框组件,其属性配置数据可以包括选项数据(属性名称为items)、是否选中数据(属性名称checked)等。以上属性名称仅为示例,不作为对属性配置数据的限制。
用户可以在属性编辑区域通过任何适用方式填写属性配置数据,例如通过手动填写或者通过下拉列表选择。上述属性配置数据属于页面组件的属性数据,除了属性配置数据之外,属性数据还包括组件类型,例如表单组件的类型为form,文本输入组件的类型为input,复选框组件的类型为checkbox。另外,当用户将页面组件拖拽到组件操作区域时,系统可自动为该页面组件生成用于对其进行唯一标识的UUID(Universally UniqueIdentifier,通用唯一识别码)。
步骤S102:用户填写页面组件的属性配置数据。在本步骤中,用户可以在属性编辑区域通过各种适用方式填写组件操作区域中每一页面组件的属性配置数据。可以理解,用户可以在确定页面组件位置关系之前或之后填写属性配置数据。
步骤S103:根据页面组件的属性配置数据和位置关系生成配置文件。在本步骤中,系统根据用户确定的页面组件位置关系以及用户填写的页面组件的属性配置数据自动生成配置文件用于记录上述组件信息。示例性地,该配置文件可以是JSON(JavaScriptObject Notation,Javascript对象标记)格式的文件。可以理解,配置文件中除记录有各页面组件的属性数据(包括步骤S102中用户填写的属性配置数据)之外,还包括各页面组件的组件关系。较佳地,在配置文件中可以使用schema字段(该字段的含义为子组件)来表示页面组件之间的从属关系,配置文件中各页面组件数据的排列顺序能够体现各页面组件之间的先后顺序。可以理解,具有前述层级位置关系的组件在配置文件中具有从属关系,具有任何一种排列位置关系(例如前后方位关系或者左右方位关系)的组件在配置文件中具有与该排列位置关系对应的先后关系。
例如,根据前例中的表单组件、文本输入组件和复选框组件的属性配置数据和位置关系可以生成以下JSON格式的配置文件:
{
"type":"Form",
"attribute":{
"confirmText":"提交",
"resetText":"重置",
"label-width":"110px"
},
"schema":[
{
"type":"Input",
"attribute":{
"type":"",
"value":"",
"placeholder":"",
"maxlength":"",
"minlength":"",
}
}
{
"type":"Checkbox",
"attribute":{
"items":"",
"checked":""
}
}
]
}
其中,对于每一页面组件Form、Input、Checkbox,主要的字段有type(组件类型)、attribute(属性)和schema(子组件),attribute字段中进一步包括至少一种属性数据。从以上JSON文件可以看到,Form组件的两个子组件为Input、Checkbox,从而体现出Form与Input以及Form与Checkbox的从属关系,同时Input组件的相应数据在Checkbox组件数据之前,体现出二组件之间的先后关系。在上述JSON文件中,省略了部分字段的数据,px表示像素。
在生成配置文件之后,可以利用预先编写的解析引擎从中提取页面组件的属性数据和组件关系数据进而生成目标代码。作为一个优选方案,在执行上述提取之前,可以首先对配置文件中的数据进行校验;在执行上述提取之后,可以对页面组件的属性数据进行集中排列,以上步骤均为可选步骤。
步骤S104:校验配置文件。在本步骤中,可以对配置文件中各数据进行合法性校验。示例性地,可以校验配置文件中的数据格式是否符合预设协议,可以校验配置文件中的属性数据是否符合预设数据类型。其中,预设协议可以规定配置文件中需要具有哪些字段以及这些字段的顺序,预设数据类型可以由页面组件开发者为任一属性数据指定并记载在配置文件中。校验通过之后,可以执行下一步骤;校验未通过时可以终止生成代码的流程。
步骤S105:解析配置文件得到页面组件的属性数据和组件关系数据。在本步骤中,利用上述解析引擎解析配置文件即可得到每一页面组件的属性数据和组件关系数据。具体应用中,属性数据和组件关系数据均为键值对数据,属性数据中的键为配置文件中的属性名称,属性数据中的值为配置文件中的属性值;组件关系数据中的键可以是自定义的变量名称例如layoutList,组件关系数据中的值为树形结构,例如针对前例的配置文件,该树形结构的根节点对应于Form组件的UUID,两个子节点分别对应于Input组件的UUID和Checkbox组件的UUID,Input组件节点为Checkbox组件节点的左侧兄弟节点。示例性地,组件关系数据中的值可以是Hashmap(一种基于哈希表的数据结构)对象。特别地,在本步骤中,可以将页面组件的属性数据和组件关系数据中的键提取为全局变量,从而确保配置文件中的变量名称(包括属性数据中的属性名称和组件关系数据中的变量名称)与模板中的变量名称一致,以利于后续步骤中的变量替换(模板、变量替换将在下文说明)。可以理解,上述提取为全局变量的步骤可以在后续任一环节执行。
步骤S106:对页面组件的属性数据进行集中排列。在本步骤中,可以对上一步骤解析得到的各页面组件的属性数据进行汇总。具体地,在保持配置文件中所有组件的从属关系不变的情况下,对同一类型组件的属性数据进行集中排列。例如,某配置文件中包括具有先后关系的页面组件A、B、C(按照先后顺序排列),其中A、C为第一类型组件,B为第二类型组件,A的子组件按照先后顺序依次为D、E、F(其中D、F为第三类型组件、E为第四类型组件),在集中排列时可以首先将A、C的属性数据集中排列(即在保持A、C内部数据不变的情况下将A、C的属性数据放置在一起),之后在A内部将D、F的属性数据集中排列。通过以上设置,能够将相同或相似的属性数据汇总以利于下一步骤中的数据查询,从而提升将属性数据输入模板(该内容将在下文说明)的性能。
步骤S107:将页面组件的属性数据和组件关系数据输入预设的页面模板生成目标代码。
在本步骤中,首先可根据用户此前选择的组件框架确定相应的模板。例如,如果用户此前选择的是电脑端Vue框架,此时需要使用电脑端Vue框架对应的模板;如果用户此前选择的是电脑端React框架,此时需要使用电脑端React框架对应的模板。可以理解,模板中已经具有代码结构并且具有相应组件框架的固定代码,模板中还具有与配置文件中页面组件属性数据对应的占位符。之后,由于经过之前的提取为全局变量的步骤,配置文件中的变量名称已经与模板一致,因此可以使用页面组件的属性数据和组件关系数据中的值替换模板中的相应占位符。变量替换完成之后,系统自动执行模板中预先编写的方法,从而根据属性数据中的组件类型从组件库(组件库包括开发完成的组件的代码)中获取每一页面组件的代码,并利用组件关系数据调整组件代码之间的关系,从而生成目标代码。
可以理解,目标代码中包含模板中的原有固定代码和页面组件的属性数据,并能够体现页面组件之间的组件关系。一般地,目标代码生成之后,程序代码开发工作中的主要工作量就完成了。显然,在本发明实施例中,只需用户简单拖拽页面组件并填写属性配置数据即可自动生成目标代码,将极大提高程序开发效率,最大程度避免固有代码或通用代码的手工编写,使用户(程序开发人员)将工作重心放在更有价值的业务逻辑等方面。同时,目标代码基于预设模板、组件关系和组件属性数据生成,由于模板为预先编写的规范模板,组件关系和组件属性数据可进行合法性校验,因此根据本发明实施例方法生成的目标代码较为规范、结构较为清晰、出错率较低。
在生成目标代码之后,用户可以点击相应按钮查看目标代码渲染之后形成的页面效果,并根据页面效果进行相应的调整和优化。
步骤S108:在目标代码的基础上增加业务逻辑代码。在本步骤中,可以在生成的目标代码基础上增加应用在实际业务场景中的业务逻辑代码,从而形成最终的符合业务需求的完整代码。例如,在包含表单组件、文本输入组件、复选框组件的前例中,可以在目标代码基础上增加业务逻辑代码以实现以下功能:在点击表单中提交按钮之后,将要采集哪些数据、调用哪个Ajax(Asynchronous Javascript And XML,异步JavaScript和可扩展标记语言)、返回什么数据、解析返回数据之后如何在页面展示等。在形成上述完整代码之后,可以进行相应测试判断业务逻辑是否能够满足需求。
以上即为根据本发明实施例的前端代码生成方法进行程序开发的主要执行步骤。可以理解,上述方法可以应用在Web前端的各种框架,适用于各种编程语言,能够自动生成单元级别、程序级别、系统级别的各种代码。
图3是本发明第二实施例中后端代码生成方法的执行步骤示意图。在图3中,将以JAVA框架为例进行说明。可以理解的是,本发明方法的适用场景并不局限于JAVA框架,而可以是任何适用的后端框架。如图3所示,本实施例的后端代码生成方法可具体执行以下步骤:
步骤S301:用户将JAVA组件拖拽到组件操作区域并确定JAVA组件之间的位置关系。
在本发明实施例中,开发人员可以对程序代码中经常使用的功能进行二次封装形成组件,并将可配置的属性暴露出来从而让用户进行个性化配置。在后端技术领域,开发人员可以将JAVA开发中常用的类、方法、第一属性(即JAVA中类或对象的属性,也可称为变量,为与前文的属性区别故称为第一属性,第一属性封装之后形成的组件可以称为属性组件)、入参(即输入参数)、出参(即输出参数)、注解等封装为类组件、方法组件、属性组件、入参组件、出参组件、注解组件。在本发明实施例中,后端组件与组件框架对应,用户在选择后端组件之前首先需要确定组件框架。
开发人员除了开发各种JAVA组件之外,还可以向用户提供操作组件的相应界面,以上界面可以通过网页的形式呈现,也可以是应用程序的界面。用于操作JAVA组件的相关界面可以与第一实施例中的界面(即图2所示界面)相似,区别之处在于左侧排列的组件以及右侧属性编辑区域显示的具体属性不同。
用户将JAVA组件拖拽到组件操作区域之后,可以调整各JAVA组件之间的位置关系。与第一实施例中相似,上述位置关系包括层级位置关系和排列位置关系,层级位置关系指的是JAVA组件在Z轴方向的位置关系,排列位置关系指的是JAVA组件在X轴或Y轴方向的位置关系。层级位置关系可以认为是JAVA组件之间的上下方位关系(上下方向可以认为与Z轴方向一致),排列位置关系可以认为是JAVA组件之间的左右方位关系(左右方向可以认为与X轴方向一致)和前后方位关系(前后方向可以认为与Y轴方向一致)。
作为一个优选方案,JAVA组件之间的层级位置关系可以与JAVA组件代码之间的从属关系对应,JAVA组件之间的排列位置关系可以与JAVA组件代码之间的先后关系对应,上述从属关系和先后关系均属于JAVA组件的组件关系。这样,用户在操作组件时,可以根据需要实现的组件关系调整组件操作区域中JAVA组件的位置关系。特别地,上述从属关系指的是JAVA组件代码之间的包含关系或者依赖关系,上述先后关系指的是JAVA组件代码在目标代码文件中所处的先后关系。
实际应用中,可以预先制定更为详细的对应规则,例如,当组件操作区域中A组件处在B组件上方时认为A组件从属于B组件(即A组件依赖于B组件或者B组件包含A组件),当组件操作区域中C组件处在D组件前方或左侧时认为C组件代码先于D组件代码(即目标代码中C组件代码在D组件代码之前)。可以理解,以上对应规则可以根据实际需求灵活设置。同时,对于上述类组件、方法组件、属性组件、入参组件、出参组件、注解组件,常见的从属关系可以包括:类组件中包含属性组件、方法组件和/或注解组件,方法组件中包括入参组件、出参组件和/或注解组件,入参组件中包括注解组件等。
例如,当用户需要在JAVA代码中包含一个类、类中需要包含多个第一属性和一个方法时,用户可以首先将类组件拖拽到组件操作区域,接着将属性组件(包括上述多个第一属性)和方法组件拖拽到类组件上方并使属性组件处在方法组件左侧。用户可以在确定JAVA组件位置关系之前或之后填写每一JAVA组件的属性配置数据。一般地,属性配置数据为键值对数据,其中的键为属性名称,值为属性值。例如,对于类组件来说,其属性配置数据可以包括类名称、包路径、修饰符、所在层(控制层controller、服务层service还是数据访问层DAO)等;对于属性组件,其属性配置数据可以包括至少一个第一属性的数据;对于方法组件,其属性配置数据可以包括方法名称、修饰符、入参、出参等;对于入参组件和出参组件,其属性配置数据可以包括参数名称、数据类型等;对于注解组件,其属性配置数据可以包括注解名称、具体属性数据等。
用户可以在属性编辑区域通过任何适用方式填写属性配置数据,例如通过手动填写或者通过下拉列表选择。当用户将JAVA组件拖拽到组件操作区域时,系统可自动为该JAVA组件生成用于对其进行唯一标识的UUID。
步骤S302:用户填写JAVA组件的属性配置数据。在本步骤中,用户可以在属性编辑区域通过各种适用方式填写组件操作区域中每一JAVA组件的属性配置数据。可以理解,用户可以在确定JAVA组件位置关系之前或之后填写属性配置数据。
步骤S303:根据JAVA组件的属性配置数据和位置关系生成配置文件。在本步骤中,系统根据用户确定的JAVA组件位置关系以及用户填写的JAVA组件的属性配置数据自动生成配置文件用于记录上述组件信息。示例性地,该配置文件可以是JSON格式的文件。可以理解,配置文件中除记录有各JAVA组件的属性数据之外,还包括各JAVA组件的组件关系。较佳地,在配置文件中可以使用schema字段来表示JAVA组件之间的从属关系,配置文件中各JAVA组件数据的排列顺序能够体现各JAVA组件之间的先后顺序。可以理解,具有前述层级位置关系的组件在配置文件中具有从属关系,具有任何一种排列位置关系的组件在配置文件中具有与该排列位置关系对应的先后关系。上述配置文件的具体形式与第一实施例类似,此处不再赘述。
在生成配置文件之后,可以利用预先编写的解析引擎从中提取JAVA组件的属性数据和组件关系数据进而生成目标代码。作为一个优选方案,在执行上述提取之前,可以首先对配置文件中的数据进行校验;在执行上述提取之后,可以对JAVA组件的属性数据进行集中排列,以上步骤均为可选步骤。
步骤S304:校验配置文件。在本步骤中,可以对配置文件中各数据进行合法性校验。示例性地,可以校验配置文件中的数据格式是否符合预设协议,可以校验配置文件中的属性数据是否符合预设数据类型。本步骤的执行细节类似于第一实施例的步骤S104,此处不再赘述。
步骤S305:解析配置文件得到JAVA组件的属性数据和组件关系数据。在本步骤中,利用上述解析引擎解析配置文件即可得到每一JAVA组件的属性数据和组件关系数据。具体应用中,属性数据和组件关系数据均为键值对数据,属性数据中的键为配置文件中的属性名称,属性数据中的值为配置文件中的属性值;组件关系数据中的键可以是自定义的变量名称例如layoutList,组件关系数据中的值为树形结构,例如针对前例的配置文件,该树形结构的根节点对应于类组件的UUID,两个子节点分别对应于属性组件的UUID和方法组件的UUID,属性组件节点为方法组件节点的左侧兄弟节点。特别地,在本步骤中,可以将JAVA组件的属性数据和组件关系数据中的键提取为全局变量,从而确保配置文件中的变量名称(包括属性数据中的属性名称和组件关系数据中的变量名称)与模板中的变量名称一致,以利于后续步骤中的变量替换。可以理解,上述提取为全局变量的步骤可以在后续任一环节执行。
步骤S306:对JAVA组件的属性数据进行集中排列。在本步骤中,可以对上一步骤解析得到的各JAVA组件的属性数据进行汇总。具体地,在保持配置文件中所有组件的从属关系不变的情况下,对同一类型组件的属性数据进行集中排列。本步骤的执行细节类似于第一实施例的步骤S106,此处不再赘述。
步骤S307:将JAVA组件的属性数据和组件关系数据输入预设的JAVA模板生成目标代码。
在本步骤中,首先可根据用户此前选择的组件框架以及所在层确定相应的模板。例如,如果用户此前选择的是控制层,此时需要使用控制层模板;如果用户此前选择的是服务层,此时需要使用服务层模板;如果用户此前选择的是数据访问层,此时需要使用数据访问层模板。可以理解,模板中已经具有代码结构并且具有相应组件框架的固定代码,模板中还具有与配置文件中JAVA组件属性数据对应的占位符。特别地,在控制层模板中可以预先建立针对服务层模板和/或数据访问层模板的引用关系,在服务层模板中可以预先建立针对数据访问层模板的引用关系,利用这种引用关系可以将控制层、服务层、数据访问层开发的代码联系起来。确定JAVA模板之后,由于经过之前的提取为全局变量的步骤,配置文件中的变量名称已经与JAVA模板一致,因此可以使用JAVA组件的属性数据和组件关系数据中的值替换JAVA模板中的相应占位符。
例如,JAVA模板中第一行代码可以是public class&nbsp,其中&nbsp是对应于类名称的占位符,如果配置文件中的类名称为controller_class,则可以将其替换上述占位符,形成以下代码:public class contr oller_class。
变量替换完成之后,系统自动执行JAVA模板中预先编写的方法,从而根据属性数据中的组件类型(即JAVA组件属于类组件、属性组件、方法组件……中的哪种类型)从组件库中获取每一JAVA组件的代码,并利用组件关系数据调整组件代码之间的关系,从而生成目标代码。
可以理解,目标代码中包含模板中的原有固定代码和JAVA组件的属性数据,并能够体现JAVA组件之间的组件关系。一般地,目标代码生成之后,程序代码开发工作中的主要工作量就完成了。显然,在本发明实施例中,只需用户简单拖拽JAVA组件并填写属性配置数据即可自动生成目标代码,将极大提高程序开发效率,最大程度避免固有代码或通用代码的手工编写,使用户(程序开发人员)将工作重心放在更有价值的业务逻辑等方面。同时,目标代码基于预设模板、组件关系和组件属性数据生成,由于模板为预先编写的规范模板,组件关系和组件属性数据可进行合法性校验,因此根据本发明实施例方法生成的目标代码较为规范、结构较为清晰、出错率较低。
实际应用中,可以根据步骤S301到步骤S307分别生成控制层、服务层、数据访问层的目标代码。可以理解,目标代码生成过程中使用的配置文件一般不同,例如,生成控制层的目标代码时使用第一配置文件,生成服务层的目标代码时使用第二配置文件,生成数据访问层的目标代码时使用第三配置文件。三套目标代码可以根据模板之间预先建立的引用关系进行结合。生成目标代码之后,用户可以点击相应按钮执行目标代码,根据执行情况进行调整和优化。
步骤S308:在目标代码的基础上增加业务逻辑代码。在本步骤中,可以在生成的目标代码基础上增加应用在实际业务场景的业务逻辑代码,从而形成最终的符合业务需求的完整代码。例如,在包含类组件、属性组件、方法组件的前例中,业务逻辑代码可以是方法组件中的具体实现代码。在形成上述完整代码之后,可以进行相应测试判断业务逻辑是否能够满足需求。
以上即为根据本发明实施例的后端代码生成方法进行程序开发的主要执行步骤。可以理解,上述方法可以应用在后端的各种框架,适用于各种编程语言,能够自动生成单元级别、程序级别、系统级别的各种代码。
图4是本发明实施例中代码生成方法的主要步骤示意图,以上代码生成方法可以应用在Web前端和Web后端的任意程序开发过程中。如图4所示,本发明实施例的代码生成方法可以执行以下步骤:
步骤S401:获取处在预设的组件操作区域的多个组件的属性配置数据以及所述多个组件之间的位置关系;其中,所述多个组件中的任一组件为预先封装并具有至少一个可配置属性。步骤S402:根据所述属性配置数据和所述位置关系生成配置文件。步骤S403:解析所述配置文件,得到所述多个组件的属性数据和组件关系数据。步骤S404:将得到的属性数据和组件关系数据输入预设模板从而生成目标代码。
在本发明实施例中,所述多个组件的属性数据和组件关系数据都为键值对数据;将得到的属性数据和组件关系数据输入预设模板从而生成目标代码,包括:将所述多个组件的属性数据和组件关系数据中的键提取为全局变量;使用所述多个组件的属性数据和组件关系数据中的值替换所述预设模板中的相应占位符从而生成目标代码。
具体应用中,在解析所述配置文件之前,所述代码生成方法还包括:校验所述配置文件中的数据格式是否符合预设协议;校验所述配置文件中的属性数据是否符合预设数据类型。
实际应用中,所述多个组件之间的位置关系包括层级位置关系和排列位置关系,所述配置文件中的组件关系包括从属关系和先后关系;其中,具有层级位置关系的组件在所述配置文件中具有从属关系,具有任一排列位置关系的组件在所述配置文件中具有与该排列位置关系对应的先后关系。
作为一个优选方案,在将得到的属性数据和组件关系数据输入预设模板之前,所述代码生成方法还包括:在保持所述多个组件之间的从属关系不变的情况下,对同一类型组件的属性数据进行集中排列。
较佳地,在本发明实施例中,所述代码生成方法还包括:在目标代码的基础上增加业务逻辑代码。
此外,在本发明实施例中,所述组件操作区域为可视化区域,所述多个组件之间的位置关系由针对所述多个组件的外部操作确定;其中,所述外部操作包括拖拽操作;所述多个组件的属性配置数据通过可视化界面输入;所述多个组件以及所述预设模板都与预先确定的组件框架对应;所述配置文件为JSON格式文件。
图5是本发明实施例中代码生成方法的具体流程示意图,如图5所示,在根据组件的属性配置数据和组件之间的位置关系生成配置文件之后,利用解析引擎执行数据校验、解析配置文件、属性数据集中排列以及将组件的属性数据和组件关系数据输入预设模板的步骤从而生成目标代码。在上述过程中,需要使用框架资源确定组件框架,使用模板资源确定上述预设模板。图5中的数据源指的是原始版本的配置文件,利用该配置文件能够实现使用一个配置文件生成多套目标代码的效果。例如,由于Vue框架和React框架中的页面组件一一对应,因此可以将Vue框架下生成的配置文件与React模板结合生成React框架下的目标代码。
在本发明实施例的技术方案中,预先将程序代码中经常使用的功能进行抽象化组件封装并提供给用户使用,当用户通过拖拽等方式选择组件、确定组件之间的位置关系并配置组件的属性数据之后,生成相应的配置文件。接着解析配置文件以得到组件的属性数据和组件关系数据,最后将解析得到的属性数据和组件关系数据输入预设模板即可生成目标代码,在目标代码的基础上增加业务逻辑代码即可以完成代码开发工作,实现预设功能需求。通过以上设置,能够实现代码开发过程中经常使用功能的组件化封装以及复用,使现有技术中构成主要工作量的目标代码编写自动完成,开发人员只需编写具体的业务逻辑代码,从而提高代码开发效率。同时,由于通过本发明实施例方法生成的代码根据预先建立的模板、用户通过拖拽等方式形成的组件关系以及用户确定的属性配置数据形成,因此代码较为规范,代码结构较为清晰,出错率极低。此外,本发明实施例提供的代码生成方法能够应用于Web前端、后端的各种框架,能够适用于各种编程语言,具有广阔的应用前景。
需要说明的是,对于前述的各方法实施例,为了便于描述,将其表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,某些步骤事实上可以采用其它顺序进行或者同时进行。此外,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是实现本发明所必须的。
为便于更好的实施本发明实施例的上述方案,下面还提供用于实施上述方案的相关装置。
请参阅图6所示,本发明实施例提供的代码生成装置600可以包括:数据获取单元601、配置生成单元602、解析单元603和代码生成单元604。
其中,数据获取单元601可用于获取处在预设的组件操作区域的多个组件的属性配置数据以及所述多个组件之间的位置关系;其中,所述多个组件中的任一组件为预先封装并具有至少一个可配置属性;配置生成单元602可用于根据所述属性配置数据和所述位置关系生成配置文件;解析单元603可用于解析所述配置文件,得到所述多个组件的属性数据和组件关系数据;代码生成单元604可用于将得到的属性数据和组件关系数据输入预设模板从而生成目标代码。
在本发明实施例中,所述多个组件的属性数据和组件关系数据都为键值对数据;代码生成单元604还可用于:将所述多个组件的属性数据和组件关系数据中的键提取为全局变量;使用所述多个组件的属性数据和组件关系数据中的值替换所述预设模板中的相应占位符从而生成目标代码。
实际应用中,所述装置600可进一步包括校验单元,其用于:校验所述配置文件中的数据格式是否符合预设协议,校验所述配置文件中的属性数据是否符合预设数据类型。
具体应用中,所述多个组件之间的位置关系包括层级位置关系和排列位置关系,所述配置文件中的组件关系包括从属关系和先后关系;其中,具有层级位置关系的组件在所述配置文件中具有从属关系,具有任一排列位置关系的组件在所述配置文件中具有与该排列位置关系对应的先后关系。
较佳地,所述装置600可进一步包括组装单元,其用于:在保持所述多个组件之间的从属关系不变的情况下,对同一类型组件的属性数据进行集中排列。
作为一个优选方案,所述装置600可进一步包括业务逻辑代码增加单元,其用于:在目标代码的基础上增加业务逻辑代码。
此外,在本发明实施例中,所述组件操作区域为可视化区域,所述多个组件之间的位置关系由针对所述多个组件的外部操作确定;其中,所述外部操作包括拖拽操作;所述多个组件的属性配置数据通过可视化界面输入;所述多个组件以及所述预设模板都与预先确定的组件框架对应;所述配置文件为JSON格式文件。
在本发明实施例的技术方案中,预先将程序代码中经常使用的功能进行组件化封装并向用户提供,当用户通过拖拽等方式选择组件、确定组件之间的位置关系并配置组件的属性数据之后,生成相应的配置文件。接着解析配置文件以得到组件的属性数据和组件关系数据,最后将解析得到的属性数据和组件关系数据输入预设模板即可生成目标代码,在目标代码的基础上增加业务逻辑代码即可以完成代码开发工作,实现预设功能需求。通过以上设置,能够实现代码开发过程中经常使用功能的组件化封装以及复用,使现有技术中构成主要工作量的目标代码编写自动完成,开发人员只需编写具体的业务逻辑代码,从而提高代码开发效率。同时,由于通过本发明实施例方法生成的代码根据预先建立的模板、用户通过拖拽等方式形成的组件关系以及用户确定的属性配置数据形成,因此代码较为规范,代码结构较为清晰,出错率极低。此外,本发明实施例提供的代码生成方法能够应用于Web前端、后端的各种框架,能够适用于各种编程语言,具有广阔的应用前景。
图7示出了可以应用本发明实施例的代码生成方法或代码生成装置的示例性系统架构700。
如图7所示,系统架构700可以包括终端设备701、702、703,网络704和服务器705(此架构仅仅是示例,具体架构中包含的组件可以根据申请具体情况调整)。网络704用以在终端设备701、702、703和服务器705之间提供通信链路的介质。网络704可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等。
用户可以使用终端设备701、702、703通过网络704与服务器705交互,以接收或发送消息等。终端设备701、702、703上可以安装有各种客户端应用,例如生成代码的应用(仅为示例)。
终端设备701、702、703可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器705可以是提供各种服务的服务器,例如对用户利用终端设备701、702、703所操作的生成代码的应用提供支持的后台服务器(仅为示例)。后台服务器可以对接收到的代码生成请求进行处理,并将处理结果(例如生成的代码——仅为示例)反馈给终端设备701、702、703。
需要说明的是,本发明实施例所提供的代码生成方法一般由服务器705执行,相应地,代码生成装置一般设置于服务器705中。
应该理解,图7中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
本发明还提供了一种电子设备。本发明实施例的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明所提供的代码生成方法。
下面参考图8,其示出了适于用来实现本发明实施例的电子设备的计算机系统800的结构示意图。图8示出的电子设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图8所示,计算机系统800包括中央处理单元(CPU)801,其可以根据存储在只读存储器(ROM)802中的程序或者从存储部分808加载到随机访问存储器(RAM)803中的程序而执行各种适当的动作和处理。在RAM803中,还存储有计算机系统800操作所需的各种程序和数据。CPU801、ROM 802以及RAM 803通过总线804彼此相连。输入/输出(I/O)接口805也连接至总线804。
以下部件连接至I/O接口805:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至I/O接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便从其上读出的计算机程序根据需要被安装入存储部分808。
特别地,根据本发明公开的实施例,上文的主要步骤图描述的过程可以被实现为计算机软件程序。例如,本发明实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行主要步骤图所示的方法的程序代码。在上述实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被中央处理单元801执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。在本发明中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这根据所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括数据获取单元、配置生成单元、解析单元、代码生成单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,数据获取单元还可以被描述为“向配置生成单元提供属性配置数据和位置关系的单元”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中的。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该设备执行时,使得该设备执行的步骤包括:获取处在预设的组件操作区域的多个组件的属性配置数据以及所述多个组件之间的位置关系;其中,所述多个组件中的任一组件为预先封装并具有至少一个可配置属性;根据所述属性配置数据和所述位置关系生成配置文件;解析所述配置文件,得到所述多个组件的属性数据和组件关系数据;将得到的属性数据和组件关系数据输入预设模板从而生成目标代码。
在本发明实施例的技术方案中,预先将程序代码中经常使用的功能进行组件化封装并向用户提供,当用户通过拖拽等方式选择组件、确定组件之间的位置关系并配置组件的属性数据之后,生成相应的配置文件。接着解析配置文件以得到组件的属性数据和组件关系数据,最后将解析得到的属性数据和组件关系数据输入预设模板即可生成目标代码,在目标代码的基础上增加业务逻辑代码即可以完成代码开发工作,实现预设功能需求。通过以上设置,能够实现代码开发过程中经常使用功能的组件化封装以及复用,使现有技术中构成主要工作量的目标代码编写自动完成,开发人员只需编写具体的业务逻辑代码,从而提高代码开发效率。同时,由于通过本发明实施例方法生成的代码根据预先建立的模板、用户通过拖拽等方式形成的组件关系以及用户确定的属性配置数据形成,因此代码较为规范,代码结构较为清晰,出错率极低。此外,本发明实施例提供的代码生成方法能够应用于Web前端、后端的各种框架,能够适用于各种编程语言,具有广阔的应用前景。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (15)

1.一种代码生成方法,其特征在于,包括:
获取处在预设的组件操作区域的多个组件的属性配置数据以及所述多个组件之间的位置关系;其中,所述多个组件中的任一组件为预先封装并具有至少一个可配置属性;
根据所述属性配置数据和所述位置关系生成配置文件;
解析所述配置文件,得到所述多个组件的属性数据和组件关系数据;
将得到的属性数据和组件关系数据输入预设模板从而生成目标代码。
2.根据权利要求1所述的方法,其特征在于,所述多个组件的属性数据和组件关系数据都为键值对数据;以及,将得到的属性数据和组件关系数据输入预设模板从而生成目标代码,包括:
将所述多个组件的属性数据和组件关系数据中的键提取为全局变量;
使用所述多个组件的属性数据和组件关系数据中的值替换所述预设模板中的相应占位符从而生成目标代码。
3.根据权利要求1所述的方法,其特征在于,在解析所述配置文件之前,所述方法还包括:
校验所述配置文件中的数据格式是否符合预设协议;
校验所述配置文件中的属性数据是否符合预设数据类型。
4.根据权利要求1所述的方法,其特征在于,所述多个组件之间的位置关系包括层级位置关系和排列位置关系,所述配置文件中的组件关系包括从属关系和先后关系;
其中,具有层级位置关系的组件在所述配置文件中具有从属关系,具有任一排列位置关系的组件在所述配置文件中具有与该排列位置关系对应的先后关系。
5.根据权利要求4所述的方法,其特征在于,在将得到的属性数据和组件关系数据输入预设模板之前,所述方法还包括:
在保持所述多个组件之间的从属关系不变的情况下,对同一类型组件的属性数据进行集中排列。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在目标代码的基础上增加业务逻辑代码。
7.根据权利要求1-6任一所述的方法,其特征在于,
所述组件操作区域为可视化区域,所述多个组件之间的位置关系由针对所述多个组件的外部操作确定;其中,所述外部操作包括拖拽操作;
所述多个组件的属性配置数据通过可视化界面输入;
所述多个组件以及所述预设模板都与预先确定的组件框架对应;
所述配置文件为JSON格式文件。
8.一种基于权利要求1-7任一所述方法的前端代码生成方法。
9.根据权利要求8所述的前端代码生成方法,其特征在于,
所述组件包括以下至少一种:表单组件、表格组件、列表组件、文本输入组件、单选框组件、复选框组件、下拉列表组件、日期选择组件、数字输入组件、级联选择组件、开关组件、对话组件、图像组件;
所述组件对应的组件框架包括以下至少一种:电脑端框架、移动端安卓框架、移动端iOS框架。
10.一种基于权利要求1-7任一所述方法的后端代码生成方法。
11.根据权利要求10所述的后端代码生成方法,其特征在于,
所述组件对应的组件框架包括JAVA框架;
所述组件包括以下至少一种:类组件、方法组件、属性组件、入参组件、出参组件、注解组件。
12.根据权利要求11所述的后端代码生成方法,其特征在于,所述后端代码生成方法分别用于生成控制层的目标代码、服务层的目标代码和数据访问层的目标代码;其中,
生成控制层的目标代码时使用第一配置文件和控制层模板,生成服务层的目标代码时使用第二配置文件和服务层模板,生成数据访问层的目标代码时使用第三配置文件和数据访问层模板;
控制层模板中预先建立针对服务层模板和/或数据访问层模板的引用关系,服务层模板中预先建立针对数据访问层模板的引用关系。
13.一种代码生成装置,其特征在于,包括:
数据获取单元,用于获取处在预设的组件操作区域的多个组件的属性配置数据以及所述多个组件之间的位置关系;其中,所述多个组件中的任一组件为预先封装并具有至少一个可配置属性;
配置生成单元,用于根据所述属性配置数据和所述位置关系生成配置文件;
解析单元,用于解析所述配置文件,得到所述多个组件的属性数据和组件关系数据;
代码生成单元,用于将得到的属性数据和组件关系数据输入预设模板从而生成目标代码。
14.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-12中任一所述的方法。
15.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-12中任一所述的方法。
CN202010230971.0A 2020-03-27 2020-03-27 代码生成方法和装置 Pending CN113448552A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010230971.0A CN113448552A (zh) 2020-03-27 2020-03-27 代码生成方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010230971.0A CN113448552A (zh) 2020-03-27 2020-03-27 代码生成方法和装置

Publications (1)

Publication Number Publication Date
CN113448552A true CN113448552A (zh) 2021-09-28

Family

ID=77807918

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010230971.0A Pending CN113448552A (zh) 2020-03-27 2020-03-27 代码生成方法和装置

Country Status (1)

Country Link
CN (1) CN113448552A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113779482A (zh) * 2021-11-12 2021-12-10 云账户技术(天津)有限公司 一种生成前端代码的方法及装置
CN114077430A (zh) * 2021-11-16 2022-02-22 上海上实龙创智能科技股份有限公司 界面生成方法、装置、电子设备及存储介质
CN114115854A (zh) * 2021-11-29 2022-03-01 北京百度网讯科技有限公司 一种sdk文件生成方法、装置、设备以及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030025728A1 (en) * 2001-07-10 2003-02-06 Ebbo David S. User control objects for providing server-side code generation from a user-defined dynamic web page content file
KR20150097162A (ko) * 2014-02-18 2015-08-26 주식회사 넥스다임 애플리케이션 개발 환경 제공 방법
CN106648630A (zh) * 2016-12-01 2017-05-10 北京趣拿软件科技有限公司 页面获取方法及装置
CN107479883A (zh) * 2017-08-07 2017-12-15 海闻科技有限公司 一种代码生成方法及代码生成器
CN109189379A (zh) * 2018-09-04 2019-01-11 百度在线网络技术(北京)有限公司 代码生成方法和装置
CN109597614A (zh) * 2017-09-28 2019-04-09 华为技术有限公司 一种业务页面定制方法及系统
CN109614097A (zh) * 2018-12-07 2019-04-12 北京金山云网络技术有限公司 平台代码的生成方法、装置及服务器

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030025728A1 (en) * 2001-07-10 2003-02-06 Ebbo David S. User control objects for providing server-side code generation from a user-defined dynamic web page content file
KR20150097162A (ko) * 2014-02-18 2015-08-26 주식회사 넥스다임 애플리케이션 개발 환경 제공 방법
CN106648630A (zh) * 2016-12-01 2017-05-10 北京趣拿软件科技有限公司 页面获取方法及装置
CN107479883A (zh) * 2017-08-07 2017-12-15 海闻科技有限公司 一种代码生成方法及代码生成器
CN109597614A (zh) * 2017-09-28 2019-04-09 华为技术有限公司 一种业务页面定制方法及系统
CN109189379A (zh) * 2018-09-04 2019-01-11 百度在线网络技术(北京)有限公司 代码生成方法和装置
CN109614097A (zh) * 2018-12-07 2019-04-12 北京金山云网络技术有限公司 平台代码的生成方法、装置及服务器

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
冯英英: "基于MDA的代码生成技术的研究与应用", 中国优秀硕士学位论文全文数据库, no. 4, 15 April 2013 (2013-04-15) *
孙斌;董悦丽;: "基于模板的BREW应用可视化界面设计及代码生成", 软件工程师, no. 1, 15 February 2010 (2010-02-15) *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113779482A (zh) * 2021-11-12 2021-12-10 云账户技术(天津)有限公司 一种生成前端代码的方法及装置
CN114077430A (zh) * 2021-11-16 2022-02-22 上海上实龙创智能科技股份有限公司 界面生成方法、装置、电子设备及存储介质
CN114115854A (zh) * 2021-11-29 2022-03-01 北京百度网讯科技有限公司 一种sdk文件生成方法、装置、设备以及存储介质

Similar Documents

Publication Publication Date Title
CN109918607B (zh) 页面搭建方法及装置、介质和计算设备
US9959198B1 (en) Simulated testing of API
CN111241454B (zh) 一种生成网页代码的方法、系统和装置
CN109062567B (zh) 基于b/s结构的信息管理系统快速开发平台
EP2151773B1 (en) Synchronous to asynchronous web page conversion
US11003571B2 (en) Customizable enterprise automation test framework
CN110806863A (zh) 接口文档生成方法及装置、电子设备、存储介质
US20140173454A1 (en) Method and system for designing, deploying and executing transactional multi-platform mobile applications
US20110167332A1 (en) System and Method for Generating Web Pages
CN113448552A (zh) 代码生成方法和装置
CN112083920A (zh) 一种前端页面设计方法、装置、存储介质及设备
CN111126019B (zh) 基于模式定制的报表生成方法、装置和电子设备
CN106354483B (zh) 一种数据处理方法、装置及电子设备
US9817811B2 (en) Web server system, dictionary system, dictionary call method, screen control display method, and demonstration application generation method
CN111752561B (zh) 区块开发方法、区块分享方法以及页面搭建方法和系统
CN109284488B (zh) 基于本地存储修改前端表格列数据的方法、装置及介质
CN110780874B (zh) 用于生成信息的方法和装置
CN112199373A (zh) 一种表单开发方法和系统
CN114036425A (zh) 页面访问方法、客户端、服务端及系统
CN111045653A (zh) 系统生成方法、装置、计算机可读介质及电子设备
CN111061478B (zh) 一种页面表单修改方法、装置、设备及可读存储介质
CN113495730A (zh) 资源包的生成及解析方法和装置
CN118259906A (zh) 一种基于PaaS框架的多端页面适配方法、设备及介质
CN113419711A (zh) 页面引导方法、装置、电子设备及存储介质
CN113721910A (zh) 界面代码生成方法、装置、电子设备和计算机可读介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination