一种模型生成方法和系统与流程

文档序号:12664435阅读:208来源:国知局
一种模型生成方法和系统与流程

本发明涉及iOS开发建模技术领域,尤其涉及一种模块生成方法和系统。



背景技术:

在iOS应用特别是基于HTTP的网络应用开发中,通常需要将网络请求的响应数据,例如JSON、XML等类型的数据,进行解析并转化为开发中方便使用的数据结构,这种根据网络响应数据创建的数据结构称为模块模型。模型可以在开发过程中被用于本地数据传输、持久化等过程中,并且能够在编译器的支持下提供内部属性的快速访问。

目前iOS应用开发中常见的生成模块模型的方法主要有如下三种:

1)第一种方案,使用系统自带的数据结构NSDictionary来存储解析后的网络响应数据,此方案只需要一次解析即可完成模型的转换,但使用起来不方便,主要表现为通过手写键值来访问内部属性值,容易因拼写错误导致访问不到目标内部属性值,同时获取到内部属性值后没有类型检查,存在一定的安全隐患。

2)第二种方案,使用根据服务器返回的数据结构手动创建对应的模型数据结构,在iOS中,这就需要手动创建模型类,根据服务器返回数据的结构声明一个个的属性,然后手动实现由网络响应数据解析得到NSDictionary转换为模型类的逻辑,此方案的优点是能够在编译器的支持下提供内部属性的快速访问,但开发效率低,如果项目中这样的模型非常多则需要手写大量重复的代码。

3)第二种方案,是使用 Mantle、JSONModel等第三方数据库来帮助创建模型类,此方案中只需要继承相应的类,然后根据服务器返回的数据结构手写对应的属性即可完成第二种方案中所有的功能,大大的简化了开发流程。但此方案仍需要手写属性,面对大量的建模需求效率不高,而且还可能会因拼写错误引入一些安全隐患,而这些隐患带来的问题通常也不太容易发现。

针对现有技术中模型生成的各种方法存在的缺点,找到一种iOS中高效便捷安全的模型生成方法已成为了急需解决的技术问题。



技术实现要素:

本发明的目的在于提供一种模块生成方法和系统,该方法最终生成的模型类都是基于Mantle、JSONModel等第三方库的模型的子类,这使得生成的模型类能够在编译器的支持下提供内部属性的快捷访问,避免通过键值对访问带来的安全性问题。同时,该方法通过提供模型类的文件模板以及自动化脚本,直接接收一个JSON(XML)字符串作为输入,通过自动化脚本解析并生成输出包含完整信息的模型类文件,从而避免了模型类属性和相关方法的手动书写,进而避免了手动书写带来的安全隐患。

本发明所采用的技术方案如下:

一种模型生成方法,其特征在于,该方法包括:步骤S101,输入需要解析的字符串,并输入需要生成的模型的类名XXModel,选择需要使用的编程语言,选择需要输出的模型类型,确定要使用的第三方库,其中所述第三方库为Mantle、JSONModel或YYModel中的任意一种;步骤S102,自动化脚本检查输入的需要解析的字符串的内容是否符合所选择的需要输出的模型类型的标准格式;若符合,则字符串有效,进入步骤S103;否则无效,并输出错误信息,并退出结束;步骤S103,自动化脚本使用所述确定要使用的第三方库对输入的字符串进行解析和判断,自动化脚本从模板存储路径读取所选择的需要输出的模型类型对应的模板文件,创建模板文件的副本,并进行命名;步骤S104,自动化脚本在内存中创建键值对集合,用来放置解析结果中的不符合规范的属性字段;替换所述模板文件中的类名片段和属性声明片段,将不符合规范的属性添加到所述集合中,处理不符合规范的属性,输出XXModel.h和XXModel.m文件;步骤S105,将XXModel.h和XXModel.m文件添加到iOS项目中。

优选地,所述对输入的字符串进行解析和判断具体包括:对输入的字符串进行解析,若解析失败,则提示失败并输出错误信息,并退出结束;若解析成功,则对解析结果进行判断,若解析结果为数组类型NSArry类型,则提示类型错误并输出错误信息,并退出结束;若解析结果为字典类型NSDictionary类型,则将解析结果输出。

优选地,所述的模板文件具体包括:模板文件为 .h 文件和 .m 文件;在 .h 文件中将模型的类名以第一占位符标识,属性名称以第二占位符标识;在 .m文件中同样将模型的类名以第三占位符标识,属性名称以第四占位符标识。

优选地,所述输出XXModel.h具体包括,对于模板文件XXModel.h,自动化脚本定位到XXModel.h中的以第一占位符标识的第一类名片段,并将其替换为XXModel,定位到以第二占位符标识的第一属性声明片段,将步骤S104中所创建的集合中存储的解析结果拼接成属性声明语句,并替换掉第二占位符,如果属性不符合iOS命名规范,则进行校正,将校正前后的结果以键值对的方式写入所述集合中,输出XXModel.h文件。

优选地,所述输出XXModel.m具体包括:对于模板文件XXModel. m,自动化脚本定位到XXModel.m中的以第三占位符标识的第二类名片段,并将其替换为XXModel,定位到以第四占位符标识的第二属性声明片段,判断所述集合的内容是否为空,如果为空,则说明模型的所有属性命名符合规范,删除第四占位符,输出XXModel.m文件,进入步骤S105;如果所述集合内容不为空,则说明模型的属性命名中有不符合规范的部分,在进行属性名映射后,输出XXModel.m文件。

一种模型生成系统,该生成系统包括输入和选择模块、检查模块、第一处理模块、第二处理模块以及添加模块,其特征在于:输入和选择模块,用于输入需要解析的字符串,并输入需要生成的模型的类名XXModel,选择需要使用的编程语言,选择需要输出的模型类型,确定要使用的第三方库,其中所述第三方库为Mantle、JSONModel或YYModel中的任意一种;检查模块,用于自动化脚本检查输入的需要解析的字符串的内容是否符合所选择的需要输出的模型类型的标准格式;若符合,则字符串有效;否则无效,并输出错误信息;第一处理模块,自动化脚本使用所述确定要使用的第三方库对输入的字符串进行解析和判断,自动化脚本从模板存储路径读取所选择的需要输出的模型类型对应的模板文件,创建模板文件的副本,并进行命名;第二处理模块,自动化脚本在内存中创建键值对集合,用来放置解析结果中的不符合规范的属性字段,替换所述模板文件中的类名片段和属性声明片段,将不符合规范的属性添加到所述集合中,处理不符合规范的属性,输出XXModel.h和XXModel.m文件;添加模块,用于将XXModel.h和XXModel.m文件添加到iOS项目中。

优选地,第一处理模块进一步包括解析单元和判断单元:解析单元,用于对输入的字符串进行解析,若解析失败,则提示失败并输出错误信息;判断单元,对解析结果进行判断,若解析结果为数组类型NSArry类型,则提示类型错误并输出错误信息;若解析结果为字典类型NSDictionary类型,则将解析结果输出。

优选地,所述的模板文件具体包括:模板文件为 .h 文件和 .m 文件,在 .h 文件中将模型的类名以第一占位符标识,属性名称以第二占位符标识,在 .m文件中同样将模型的类名以第三占位符标识,属性名称以第四占位符标识。

优选地,所述第二处理模块包括第一输出单元,具体包括:第一输出单元,用于输出模板文件XXModel.h,自动化脚本定位到XXModel.h中的以第一占位符标识的第一类名片段,并将其替换为XXModel,定位到以第二占位符标识的第一属性声明片段,将所创建的集合中存储的解析结果拼接成属性声明语句,并替换掉第二占位符,如果属性不符合iOS命名规范,则进行校正,将校正前后的结果以键值对的方式写入所述集合中,输出XXModel.h文件。

优选地,所述第二处理模块包括第二输出单元,具体包括:第二输出单元,用于输出模板文件XXModel. m,自动化脚本定位到XXModel.m中的以第三占位符标识的第二类名片段,并将其替换为XXModel,定位到以第四占位符标识的第二属性声明片段,判断所述集合的内容是否为空,如果为空,则说明模型的所有属性命名符合规范,删除第四占位符,输出XXModel.m文件;如果所述集合内容不为空,则说明模型的属性命名中有不符合规范的部分,在进行属性名映射后,输出XXModel.m文件。

本发明的技术方案所能获得的有益效果包括,保护针对iOS项目中对服务器返回数据进行建模的方案与算法。

附图说明

图1为该模型生成方法的流程示意图;

图2为该模型生成系统的功能模块示意图。

具体实施方式

为了更好的说明本发明,现结合具体实施例以及说明书附图对技术方案作进一步的说明。虽然实施例中记载了这些具体的实施方式,然其并非用以限定本发明,任何所属技术领域中具有通常知识者,在不脱离本发明的精神和范围内,当可作些许的更动与润饰,故本发明的保护范围当视权利要求书所界定者为准。

该模型生成方法的流程示意图如图1所示。

步骤S101,输入需要解析的字符串,并输入需要生成的模型的类名XXModel,选择需要使用的编程语言,选择需要输出的模型类型,确定要使用的第三方库,其中所述第三方库为Mantle、JSONModel或YYModel中的任意一种;

提供Objective-C和Swift两种语言项目的模型生成,如果是Objective-C项目则生成 .h和 .m 文件,如果为Swift项目则选择生成 .swift文件,选择不同文件类型在解析替换细节上稍有不同,但整体流程一致,不构成生成算法上的差异;

步骤S102,自动化脚本检查输入的需要解析的字符串的内容是否符合所选择的需要输出的模型类型的标准格式;若符合,则字符串有效,进入步骤S103;否则无效,并输出错误信息,并退出结束;

其中,自动化脚本是指本方案中用到的能够完成特定功能的在电脑上执行的软件。该步骤主要用于过滤一些非法输入以提高安全性。

步骤S103,自动化脚本使用所述确定要使用的第三方库对输入的字符串进行解析和判断,自动化脚本从模板存储路径读取所选择的需要输出的模型类型对应的模板文件,创建模板文件的副本,并进行命名;

例如,自动化脚本使用iOS系统开发工具包中所提供的NS JSON Serialization库来对JSON进行解析,若解析成功,则解析结果为NS Dictionary类型或NS Array类型,这两种类型是NS JSON Serialization可能的两种解析结果。其中NS Dictionary类型为键值对容器,NS Array类型为数组容器。若解析失败,则提示失败并打印错误信息,流程结束。若为NSArray类型,则提示JSON类型错误并打印错误信息,流程结束。若为NS Dictionary则输出解析结果,进入步骤S106。

步骤S104,自动化脚本在内存中创建键值对集合,用来放置解析结果中的不符合规范的属性字段;

替换所述模板文件中的类名片段和属性声明片段,将不符合规范的属性添加到所述集合中,处理不符合规范的属性,输出XXModel.h和XXModel.m文件;

其中模板文件为 .h 文件和 .m 文件,在 .h 文件中将模型的类名以<#ModelName#>占位符标识,属性名称以<#PropertyName#>占位符标识,在 .m文件中同样将模型的类名以<#ModelName#>占位符标识,属性名称以<#PropertyMap#>占位符标识。

例如,读取与JSON Model对应的模板文件JSON Model Template.h和 JSON Model Template.m,创建副本并分别命名为XXModel.h和XXModel.m,模板文件为事先准备好的文件。

在解析结束之后,通过分别查找这些标识符就可以定位到需要替换的位置从而进行替换。在软件开发中,客户端和服务器之间的命名规范可能存在差异,客户端获取到的从服务器返回的数据的字段名称如old_name可能不符合客户端的命名规范如oldName,因此需要对从服务器获取到的字段进行重命名,创建的集合即用来以键值对的方式存储old_name、oldName。

对于模板文件XXModel.h,自动化脚本定位到XXModel.h中的类名片段<#ModelName#>,并将其替换为XXModel,定位到属性声明片段<#PropertyName#>,将步骤S107中所创建的集合中存储的解析结果拼接成属性声明语句,并替换掉<#PropertyName#>占位符,如果属性不符合iOS命名规范,则进行校正,将校正前后的结果以键值对的方式写入所述集合中,输出XXModel.h文件。

对于模板文件XXModel.m,自动化脚本定位到XXModel.m中的类名片段<#ModelName#>,并将其替换为XXModel,定位到属性声明片段<#PropertyMap#>片段,判断所述集合的内容是否为空,如果为空,则说明模型的所有属性命名符合规范,删除<#PropertyMap#>占位符,输出XXModel.m文件,进入步骤S109;如果所述集合内容不为空,则说明模型的属性命名中有不符合规范的部分,在进行属性名映射后,输出XXModel.m文件,进入步骤S109。

以JSON为例,在JSON Model的(`+ (JSONKeyMapper *)keyMapper `)方法中将所述集合作为输入来构造JSON Key Mapper,用此方法替换<#PropertyMap#>占位符,最终输出XXModel.m文件,进入步骤S110。上述(`+ (JSONKeyMapper *)keyMapper `)方法为JSON Model库提供的对属性名做映射的方法,通过此方法可以将JSON 的字段名,例如old_name重命名为需要的任何名称,例如oldName)。

该步骤主要自动构造了模型的 .h 文件XXModel.h,以及模型的 .m 文件XXModel.m。

步骤S105,将XXModel.h和XXModel.m文件添加到iOS项目中。

在该方法流程中,需要输入字符串和模型的名称,并选择使用的编程语言和第三方库,其他过程由自动化脚本完成,并提供了直接由字符串到模型的方法和工具。相比传统的手工添加方法,添加一个模型,需要经过人工解析字符串,再创建模型,之后完善属性这几个步骤,根据模型的复杂性不同,耗时30秒到3分钟不等。该方法只需要提供简单的输入即可自动完成模型的生成,耗时5秒以内,在有大量模型需要创建时,高效优势更明显。由自动化脚本取代手工,更便捷,增加了字符串有效性验证,生成内容由自动化工具生成,避免了书写错误带来的安全隐患。

该模型生成系统的功能模块示意图如图2所示。该生成系统包括输入和选择模块、检查模块、第一处理模块、第二处理模块以及添加模块,其特征在于:输入和选择模块,用于输入需要解析的字符串,并输入需要生成的模型的类名XXModel,选择需要使用的编程语言,选择需要输出的模型类型,确定要使用的第三方库,其中所述第三方库为Mantle、JSONModel或YYModel中的任意一种;检查模块,用于自动化脚本检查输入的需要解析的字符串的内容是否符合所选择的需要输出的模型类型的标准格式;若符合,则字符串有效;否则无效,并输出错误信息;第一处理模块,自动化脚本使用所述确定要使用的第三方库对输入的字符串进行解析和判断,自动化脚本从模板存储路径读取所选择的需要输出的模型类型对应的模板文件,创建模板文件的副本,并进行命名;第二处理模块,自动化脚本在内存中创建键值对集合,用来放置解析结果中的不符合规范的属性字段,替换所述模板文件中的类名片段和属性声明片段,将不符合规范的属性添加到所述集合中,处理不符合规范的属性,输出XXModel.h和XXModel.m文件;添加模块,用于将XXModel.h和XXModel.m文件添加到iOS项目中。

第一处理模块进一步包括解析单元和判断单元:解析单元,用于对输入的字符串进行解析,若解析失败,则提示失败并输出错误信息;判断单元,对解析结果进行判断,若解析结果为数组类型NSArry类型,则提示类型错误并输出错误信息;若解析结果为字典类型NSDictionary类型,则将解析结果输出。

第二处理模块包括第一输出单元,第一输出单元用于输出模板文件XXModel.h,自动化脚本定位到XXModel.h中的以第一占位符标识的第一类名片段,并将其替换为XXModel,定位到以第二占位符标识的第一属性声明片段,将所创建的集合中存储的解析结果拼接成属性声明语句,并替换掉第二占位符,如果属性不符合iOS命名规范,则进行校正,将校正前后的结果以键值对的方式写入所述集合中,输出XXModel.h文件。

第二处理模块包括第二输出单元,第二输出单元用于输出模板文件XXModel. m,自动化脚本定位到XXModel.m中的以第三占位符标识的第二类名片段,并将其替换为XXModel,定位到以第四占位符标识的第二属性声明片段,判断所述集合的内容是否为空,如果为空,则说明模型的所有属性命名符合规范,删除第四占位符,输出XXModel.m文件;如果所述集合内容不为空,则说明模型的属性命名中有不符合规范的部分,在进行属性名映射后,输出XXModel.m文件。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1