一种编程友好型的敏捷代码自动生成方法与流程

文档序号:12034339阅读:215来源:国知局
本发明涉及敏捷计算机编程开发
技术领域
:,尤其涉及一种编程友好型的敏捷代码自动生成方法。
背景技术
::随着it行业的不断发展,软件开发的复杂度也随着不断提高。与此同时,软件的开发团队也越来越庞大,而如何更好地协同整个团队进行高效准确的工作,从而确保软件开发的质量已经慢慢成为了开发过程中不可回避的问题。在软件开发中,不同的功能模块一般由不同的开发成员负责,同一功能模块的各层代码也可能是不同的开发成员编写,经验告诉我们,模块之间的问题是最难解决的,也是最耗费时间的。它需要多个开发人员相互协作找出问题,而协作过程中的沟通所消耗的时间成本是相当高的,而且还可能因为沟通的不足导致模块返工。在这个过程中,当一个模型中涉及到多个表结构时,即使其涉及到字段的新增、修改和删除,也需要重新进行代码的制作,从而使得在代码生成过程中,需要过多的人工参与以及需要大量的时间和人力进行重复性的代码制作工作。现有技术中虽然也有一些代码生成器,但其都是针对某一种特定的系统进行开发的,不具有通用性,也不可避免代码制作过程中的重复性工作。可见,现有的代码生成器一般是按照的一种特定的格式,生成一种特定框架定义好的目录结构以及该特定框架事先定义的命名规则的文件,而在实际的项目中框架及目录各方面应当由项目本身所定制,在使用过程中无法记录历史每一次脚本变更记录,也不具备在同一次变更中的脚本自动合并的能力,局限性大,扩展性差。技术实现要素:为解决上述的技术问题,本发明提供了一种编程友好型的敏捷代码自动生成方法,本发明提出的方法解决了现有技术下代码生成器局限性大,扩展性差的问题。本发明实现上述技术效果所采用的技术方案是:一种编程友好型的敏捷代码自动生成方法,所述方法包括以下步骤:s1、建立待生成的代码的数据描述;s2、按逻辑功能模块配置代码模板;s3、将生成的数据描述输入到描述解析器进行解析;s4、通过扫描相应的代码模板的占位符,找到所述描述解析器解析出的相应的数据进行填充,组装出对应功能模块的初始代码;s5、由代码验证器对生成的初始代码进行验证,验证通过后将每个功能模块对应的初始代码按照逻辑结构进行合并组装,同时单独存储每个功能模块对应的初始代码,最后将单个功能模块对应的初始代码以及合并组装后的初始代码分发给对应功能模块的开发组。进一步地,在上述的编程友好型的敏捷代码自动生成方法中,在所述步骤s1中,所述建立待生成的代码的数据描述通过xml文档进行建立生成。进一步地,在上述的编程友好型的敏捷代码自动生成方法中,在步骤s3中,所述描述解析器对所述xml文档进行解析的过程包括:s31、获取根节点,通过库函数elementdocument.getrootelement()获取所述xml文档的根节点;s32、获取子节点元素,在获得根节点之后,利用递归下降法从根节点寻找其子节点,构造语法树;s33、获得命令参数,通过遍历整个xml文档结构,提取出所有的属性,再按照非参数属性识别规则排除整个xml文档结构中的非参数,生成命令文本模板,成对所述xml文档的解析。进一步地,在上述的编程友好型的敏捷代码自动生成方法中,在步骤s32中,从根节点寻找其子节点以构造语法树的过程通过函数elementelement.getchild(stringname)和函数listelement.getchildren(stringname)完成,包括步骤:函数elementelement.getchild(stringname)从父节点得到名称为name的单一子节点,函数返回值为空表示有0个元素;函数element.getchildren(stringname)用于获取多个子元素,对于list中的每一个元素,通过list的迭代器获取,list中的元素个数通过list的size()方法确定。进一步地,在上述的编程友好型的敏捷代码自动生成方法中,在步骤s4中,对应功能模块的初始代码的组装过程包括:s41、检查所述描述解析器解析出的描述文件的文档语法、组织结构是否无误,验证录入的解析数据类型是否正确,如查出描述文档的内容不符合文档规定,则抛出异常信息;s42、读取所述描述解析器解析出的描述文件,并抽取其中的解析数据并加载到内存中以待访问;s43、将解析数据填入相应的初始代码中。进一步地,在上述的编程友好型的敏捷代码自动生成方法中,所述xml描述文件包括rml元素、system元素、actor元素、connect元素、editable元素、param元素、port元素、src_port元素、dest_port元素、src_actor元素和dest_actor元素中的部分或全部。进一步地,在上述的编程友好型的敏捷代码自动生成方法中,在步骤s42中,读取所述描述解析器解析出的描述文件的具体过程为:s421、以命令行为单位,每读入一行进行分析,当遇到一个标题行时表示一个命令说明的开始,循环匹配直到出现另一个标题行时,表示结束对这个命令的说明;s422、将分析出的所有命令的结构化数据作为解析结果存放在列表容器中,供代码模板对参数的提取以及代码的生成。进一步地,在上述的编程友好型的敏捷代码自动生成方法中,在步骤s421中,对命令行的分析采用表驱动的方式进行分析,该表为一个三维表,其中,第一维表示当前的分析状态,第二维表示当前输入行,第三维的值为“0”或“1”,其中“0”元素表示动作,“1”元素表示下一个状态,通过执行指定的动作并转到下一个状态,循环对每一行进行分析。进一步地,在上述的编程友好型的敏捷代码自动生成方法中,对应每个功能模块的初始代码均有序存储在初始代码容器中,每个功能模块的初始代码分别与合并组装后的初始代码进行一对一关联映射,每个功能模块具有指向与对应功能模块开发组的代码接收容器的指针,用于在相应的功能模块的初始代码在生成后分发至对应的模块开发组的代码接收容器。进一步地,在上述的编程友好型的敏捷代码自动生成方法中,在步骤s33中,所述的非参数识别规则包括两个规则项:属性名识别规则和属性值识别;判断某属性为非参数属性的判断规则为:当某个属性同时满足两个规则项时,则该属性被视为非参数属性,若一个规则项为空则只要满足另一个规则项,该属性被视为非参属性。本发明的有益效果是:本发明解决了现有技术下代码生成器局限性大,扩展性差的问题,其基于多代码模板的代码生成与具体代码的解耦,降低了代码耦合度,提高了扩展性,可以很好地满足定制化需求。针对每个功能模块单独生成对应的初始代码,以及将各功能模块按照逻辑结构进行合并组装,使得软件开发人员有一个全局的框架结构。通过将各独立的功能模块的对应初始代码和合并组装后的全局的初始代码打包分发给相应的开发组,使得该相应功能模块开发组的开发人员在独立进行单功能模块的开发过程中有一个较好的指导性框架,便于后期的调试和维护。附图说明图1为本发明实施例的流程图。具体实施方式为了对本发明作出更加清楚完整地说明,下面结合附图和本发明的具体实施例对本发明的技术方案作出进一步说明。如图1所示,本发明提出的一种编程友好型的敏捷代码自动生成方法,该方法包括以下步骤:s1、建立待生成的代码的数据描述;可以通过输入界面,如用户接口ui界面,生成数据描述。由于数据描述语句是对用户比较友好的,也可以由用户手动输入建立数据。数据描述包括按照预设规则语法进行定义的关键字和业务逻辑,由于xml文件能够更好的体现结构层级关系、更容易被程序语言识别,同时也可以检验需求文档是否符合语法逻辑。另外,xml文件是一种中间语言的角色,可以起到承上启下的作用,每一个关键字都将成为xml中的一个元素,可以是一个node,也可以是一个属性。在它转化成xml后,会有节点名称表示(如,节点里面是用于描述数据字典里的内容)。xml文档具有文件格式良好、数据表达完整、验证容易、便于程序访问等特点。该xml文档中的结构和组织由xmlscheme来定义,xmlscheme规定了业务模型必须提供的内容,具体包括业务组件名称、包名、业务对象类名称、属性名称、类型、长度、对应的数据表段长度。该xml描述文件包括rml元素、system元素、actor元素、connect元素、editable元素、param元素、port元素、src_port元素、dest_port元素、src_actor元素和dest_actor元素中的部分或全部。s2、按逻辑功能模块配置代码模板;根据功能需求,准备相应的代码模板,如插入数据、删除数据、查找数据、增加数据等等。模板是最终生成代码的原型,根据模板可以生成规范和可用的代码。良好的模板设计包含了软件设计和开发人员多年的经验,确保了生成代码的品质,并可以生成大部分的业务逻辑。涉及j2ee各层次的模板共五个,包括pojo.vm,pojo业务对象模板;dao.vm,业务对象的数据访问接口模板;daohibernateimpl.vm,基于hibernate的数据访问层接口实现模板;service.vm,服务层接口模板;servicempl.vmi,服务层接口实现模板。s3、将生成的数据描述输入到描述解析器进行解析;具体的,在本发明的优选实施例中,描述解析器对所述xml文档进行解析的过程包括:s31、获取根节点,通过库函数elementdocument.getrootelement()获取所述xml文档的根节点;s32、获取子节点元素,在获得根节点之后,利用递归下降法从根节点寻找其子节点,构造语法树;s33、获得命令参数,通过遍历整个xml文档结构,提取出所有的属性,再按照非参数属性识别规则排除整个xml文档结构中的非参数,生成命令文本模板,成对所述xml文档的解析。在步骤s32中,从根节点寻找其子节点以构造语法树的过程通过函数elementelement.getchild(stringname)和函数listelement.getchildren(stringname)完成,包括步骤:函数elementelement.getchild(stringname)从父节点得到名称为name的单一子节点,函数返回值为空表示有0个元素;函数element.getchildren(stringname)用于获取多个子元素,对于list中的每一个元素,通过list的迭代器获取,list中的元素个数通过list的size()方法确定。在步骤s33中,所述的非参数识别规则包括两个规则项:属性名识别规则和属性值识别;判断某属性为非参数属性的判断规则为:当某个属性同时满足两个规则项时,则该属性被视为非参数属性,若一个规则项为空则只要满足另一个规则项,该属性被视为非参属性。s4、通过扫描相应的代码模板的占位符,找到所述描述解析器解析出的相应的数据进行填充,组装出对应功能模块的初始代码;在步骤s4中,对应功能模块的初始代码的组装过程包括:s41、检查所述描述解析器解析出的描述文件的文档语法、组织结构是否无误,验证录入的解析数据类型是否正确,如查出描述文档的内容不符合文档规定,则抛出异常信息;s42、读取所述描述解析器解析出的描述文件,并抽取其中的解析数据并加载到内存中以待访问;s43、将解析数据填入相应的初始代码中。在步骤s42中,读取所述描述解析器解析出的描述文件的具体过程为:s421、以命令行为单位,每读入一行进行分析,当遇到一个标题行时表示一个命令说明的开始,循环匹配直到出现另一个标题行时,表示结束对这个命令的说明;s422、将分析出的所有命令的结构化数据作为解析结果存放在列表容器中,供代码模板对参数的提取以及代码的生成。在步骤s421中,对命令行的分析采用表驱动的方式进行分析,该表为一个三维表,其中,第一维表示当前的分析状态,第二维表示当前输入行,第三维的值为“0”或“1”,其中“0”元素表示动作,“1”元素表示下一个状态,通过执行指定的动作并转到下一个状态,循环对每一行进行分析。对应每个功能模块的初始代码均有序存储在初始代码容器中,每个功能模块的初始代码分别与合并组装后的初始代码进行一对一关联映射,每个功能模块具有指向与对应功能模块开发组的代码接收容器的指针,用于在相应的功能模块的初始代码在生成后分发至对应的模块开发组的代码接收容器。在步骤s43中,解析数据填入初始代码的过程是:该解析数据按照规定格式进行套取,加载到对应的结点和常量替换,从而生成初步的代码规范,并对应的生成包含映射类、实体类、接口类、业务逻辑类四个文件。并根据设置的属性,添加包结构和路径,以及引用、备注、版本信息,生成对应的业务层代码。s5、由代码验证器对生成的初始代码进行验证,验证通过后将每个功能模块对应的初始代码按照逻辑结构进行合并组装,同时单独存储每个功能模块对应的初始代码,最后将单个功能模块对应的初始代码以及合并组装后的初始代码分发给对应功能模块的开发组。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1