CN115344247A - 用于iOS中不同接口数据结构类型的适配器及适配方法 - Google Patents
用于iOS中不同接口数据结构类型的适配器及适配方法 Download PDFInfo
- Publication number
- CN115344247A CN115344247A CN202210955296.7A CN202210955296A CN115344247A CN 115344247 A CN115344247 A CN 115344247A CN 202210955296 A CN202210955296 A CN 202210955296A CN 115344247 A CN115344247 A CN 115344247A
- Authority
- CN
- China
- Prior art keywords
- data
- adaptation
- function
- ios
- adapter
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Abstract
本发明公开一种用于iOS中不同接口数据结构类型的适配器,对不同服务端接口的数据按照预设适配规则进行适配并输出适配后的标准数据,所述预设适配规则为数据层级适配规则和数据名称适配规则且两者顺序执行,所述数据层级适配规则用于将不同服务端返回的code码层和data数据层放到同一个层级,所述数据名称适配规则用于将不同服务端返回的数据名称命名进行统一。本发明将数据和页面通过适配器进行了一个分离,经由适配器完成对数据结构变更的适配,不需要修改相关开发页面的代码逻辑,减轻了开发量,提高了开发效率,同时增加了项目稳定性。
Description
技术领域
本发明涉及iOS移动应用开发领域,尤其涉及iOS移动应用开发中为了适配不同服务端接口数据结构类型而构建适配器以进行高效率开发的方法,具体为一种用于iOS中不同接口数据结构类型的适配器及适配方法。
背景技术
在iOS移动应用开发中,随着版本的迭代及需求的各种变更,各种后台服务端技术也被应用到移动开发中,如Go、Java、JS等等,每种后台技术都有其特有的优势和独特的应用场景,例如Go适合高并发开发场景、Java适合大型复杂项目、JS较适合快应用中的微架构项目,但同时也存在着交叉,在大型iOS项目的开发中,其后台技术可能根据其子业务的不同而采用不同的后台技术。
随着移动互联网的蓬勃发展,在版本迭代和需求变更的过程中,iOS开发项目会面临服务端后台技术转型、技术迭代、技术重构等,如图1所示,这随之而来带来的结果便是服务端数据结构的变更,服务端数据结构的变更会导致iOS项目中所有页面都需要进行结构适配开发,适配后还需要大量的回归测试来验证其稳定性,这大大的提高了项目的开发成本,同时也导致项目的稳定性大大降低,严重影响了用户体验。
发明内容
为克服上述现有技术的不足,本发明提供一种用于iOS中不同接口数据结构类型的适配器及适配方法,能够降低开发成本,提高项目稳定性。
一方面,本发明提供一种用于iOS中不同接口数据结构类型的适配器,对不同服务端接口的数据按照预设适配规则进行适配并输出适配后的标准数据,所述预设适配规则为数据层级适配规则和数据名称适配规则且两者顺序执行,所述数据层级适配规则用于将不同服务端返回的code码层和data数据层放到同一个层级,所述数据名称适配规则用于将不同服务端返回的数据名称命名进行统一。
上述技术方案将数据和页面通过适配器进行了一个分离,经由适配器完成对数据结构变更的适配,不需要修改相关开发页面的代码逻辑,减轻了开发量,提高了开发效率,同时增加了项目稳定性。
作为进一步的技术方案,所述数据层级适配规则为:遍历与code码层同层级的所有数据,直到找到data数据层,然后将data数据层的所有数据作为一个NSDictionary类型的对象通过原生函数setValue:forKey:以键值对的形式存储到code码层所在的层级。
上述技术方案可实现数据层级的统一,解决因不同服务端所使用的编程语言不一样,其返回的数据结构层级也不一样所导致的数据不适配问题。
作为进一步的技术方案,遍历与code码层同层级的所有数据后,如未发现data数据层,则继续遍历code码层的下一层或上一层,直到找到data数据层。
作为进一步的技术方案,所述数据名称适配规则为遍历所有数据并将所有数据名称统一为“驼峰”写法。
数据名称的命名在不同的编程语言中有不同的规则,典型的有“驼峰”写法和“匈牙利”写法,为了方便APP端统一取值使用,上述技术方案统一使用“驼峰”命名方法进行数据名称的统一。
作为进一步的技术方案,通过“正则表达式”对所有数据进行遍历匹配,如匹配到“匈牙利”写法的数据就将其名称中的“_”下划线删除,并将下划线后的一个英文字母转换成大写。
作为进一步的技术方案,在服务端数据结构发生新的变更类型时,在所述预设适配规则中新增针对新的变更类型的适配规则。
由于本发明将数据和页面通过适配器进行了一个分离,因此在数据结构类型变更时,只需要对适配器做一个修改,增加一个新的适配规则就可以完成对功能页面的适配,不需要去修改页面逻辑或者底层数据,提高了开发效率,增加了项目稳定性。
一方面,本发明提供一种用于iOS中不同接口数据结构类型的适配方法,在接口向服务端请求数据回调时,通过预设适配规则对回调的数据进行适配后输出标准数据;在适配时,先执行数据层级适配规则,将不同服务端返回的code码层和data数据层放到同一个层级;再执行数据名称适配规则,将所有数据名称统一为“驼峰”写法。
上述技术方案解决了后台服务端技术转型、技术迭代、技术重构等导致服务端数据结构变更,进而导致iOS项目开发需要大量适配工作,增加了项目的不稳定性等问题,通过该技术方案对不同接口数据结构类型进行适配后输出标准数据,从而降低开发成本、提高项目稳定性。
作为进一步的技术方案,所述适配方法进一步包括:
步骤1,添加NSDictionary分类文件;
步骤2,在NSDictionary分类文件中添加load()函数;
步骤3,在NSDictionary分类文件中添加hs_setAdaptRule:函数,在该函数中配置全局的数据适配规则,包括数据层级适配规则和数据名称适配规则;
步骤4,在NSDictionary分类文件中,通过class_replaceMethod()函数替换掉项目中处理数据函数handleOriginalData:的函数指针;
步骤5,在NSDictionary分类文件中添加添加hs_handleOriginalData:函数,进行步骤2-4中各函数的调用,完成数据适配并输出标准数据。
作为进一步的技术方案,当服务端接口的数据结构类型发生变更时,在步骤3中修改预设适配规则,增加适用于发生变更的数据结构类型的适配规则。
与现有技术相比,本发明的有益效果在于:
(1)本发明将数据和页面通过适配器进行了一个分离,经由适配器完成对数据结构变更的适配,不需要修改相关开发页面的代码逻辑,减轻了开发量,提高了开发效率,同时增加了项目稳定性。
(2)本发明通过创建NSDictionary分类文件,方便处理同类型数据,减少项目工程间的耦合度。
(3)本发明可使开发者在完全不需要知道背后处理逻辑的情况下,无感知的对服务端返回的数据结构进行统一适配,大大增加了项目的稳定性,提高了开发效率,同时增强了iOS移动应用用户体验。
附图说明
图1为现有技术示意图。
图2为根据本发明实施例的用于iOS中不同接口数据结构类型的适配器示意图。
图3为根据本发明实施例的用于iOS中不同接口数据结构类型的适配方法流程图。
具体实施方式
以下将结合附图对本发明各实施例的技术方案进行清楚、完整的描述,显然,所描述发实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施例,都属于本发明所保护的范围。
本发明一方面提供一种用于iOS中不同接口数据结构类型的适配器,如图2所示,该适配器对不同服务端接口的数据按照预设适配规则进行适配并输出适配后的标准数据,所述预设适配规则为数据层级适配规则和数据名称适配规则且两者顺序执行,所述数据层级适配规则用于将不同服务端返回的code码层和data数据层放到同一个层级,所述数据名称适配规则用于将不同服务端返回的数据名称命名进行统一。
通过适配器将数据和页面进行一个分离,经由适配器完成对数据结构变更的适配,不需要修改相关开发页面的代码逻辑,减轻了开发量,提高了开发效率,同时增加了项目稳定性。
所述数据层级适配规则为:遍历与code码层同层级的所有数据,直到找到data数据层,然后将data数据层的所有数据作为一个NSDictionary类型的对象通过原生函数setValue:forKey:以键值对的形式存储到code码层所在的层级。通过该适配规则可实现数据层级的统一,解决因不同服务端所使用的编程语言不一样,其返回的数据结构层级也不一样所导致的数据不适配问题。
进一步地,遍历与code码层同层级的所有数据后,如未发现data数据层,则继续遍历code码层的下一层或上一层,直到找到data数据层。
所述数据名称适配规则为遍历所有数据并将所有数据名称统一为“驼峰”写法。
数据名称的命名在不同的编程语言中有不同的规则,典型的有“驼峰”写法和“匈牙利”写法,为了方便APP端统一取值使用,上述技术方案统一使用“驼峰”命名方法进行数据名称的统一。
进一步地,通过“正则表达式”对所有数据进行遍历匹配,如匹配到“匈牙利”写法的数据就将其名称中的“_”下划线删除,并将下划线后的一个英文字母转换成大写。
在服务端数据结构发生新的变更类型时,在所述预设适配规则中新增针对新的变更类型的适配规则。在数据结构类型变更时,只需要对适配器做一个修改,增加一个新的适配规则就可以完成对功能页面的适配,不需要去修改页面逻辑或者底层数据,提高了开发效率,增加了项目稳定性。
本发明一方面提供一种用于iOS中不同接口数据结构类型的适配方法,如图3所示,具体包括:
步骤1,添加NSDictionary分类文件。在项目工程中为NSDictionary创建分类文件,因为绝大部分的服务端接口原始数据类型都是字典NSDictionary类型,NSDictionary分类文件方便处理同类型数据,并且添加分类文件还有一个最大好处是可以最大程度的可以解决项目里面的耦合问题,并且不会对原有工程造成任何影响。
步骤2,在NSDictionary分类文件中添加load()函数。load()函数本身为系统函数,在系统运行的时候会自动调用该函数,在此步骤中我们对该函数进行重写覆盖系统原生函数。
步骤3,在NSDictionary分类文件中添加hs_setAdaptRule:函数,在该函数中配置全局的数据适配规则,主要有两种适配规则:数据层级适配规则和数据名称适配规则。
具体地,在不同服务端所使用的编程语言不一样,其返回的数据结构层级也会有所差异,最典型的就是服务端所返回的code码和data数据的结构层级关系不一致,有的是data数据层和code码层在同一层级,而有的是data数据层在code码层的下一个层级或上一个层级,像这种情况我们就需要有一个标准,那就需要一个数据层级适配规则将数据层级进行统一。我们通常是将code码层和data数据层放到同一个层级,其实现逻辑为通过循环遍历与code码同层级的所有数据,如未发现data层,则继续遍历code码的下一层或上一层,直到找到data数据层,然后将data层的所有数据作为一个NSDictionary类型的对象通过原生函数setValue:forKey:以键值对的形式存储到和code码一个层级
具体地,数据名称的命名在不同的编程语言中有不同的规则,典型的有“驼峰”写法和“匈牙利”写法,为了方便APP端统一取值使用,那就需要给这些名称写法统一标准,需要一个适配规则来进行统一,我们通常是统一使用“驼峰”命名方法,既一个变量中多个英文单词时,其单词首字母大写,其实现逻辑是通过“正则表达式”对所有数据进行遍历匹配,如匹配到“匈牙利”写法的数据就将其名称中的“_”下划线删除,并将下划线后的一个英文字母转换成大写。
步骤4,在NSDictionary分类文件中,在步骤2中的load()函数加载时通过iOS系统函数class_replaceMethod()将NSDictionary中工程中处理后端数据的函数handleOriginalData:(注释:该函数为项目中处理服务端数据的函数)的IMP函数指针替换为hs_handleOriginalData:(注释:该函数为步骤5中的声明的函数)的IMP函数指针,通过此步骤已经完成了对项目工程中函数的替换,开发者在调用项目工程中函数handleOriginalData:时,我们已经通过该步骤的操作将其函数调用无感知的替换到我们自己的函数hs_handleOriginalData:中。
步骤5,在NSDictionary分类文件中添加添加hs_handleOriginalData:函数,该函数为“桥梁”函数,其关键点不在于函数本身,而是在创建该函数之前做的一系列铺垫工作在该函数中得到了体现,具体包括在在步骤2中覆盖系统函数load()、在步骤3中添加的数据适配规则函数hs_setAdaptRule:、在步骤4中通过class_replaceMethod()函数替换掉项目中处理数据函数handleOriginalData:的函数指针。通过这3个步骤构成了hs_handleOriginalData:函数的核心,开发者完全不需要知道这背后的处理逻辑,可以无感知的对服务端返回的数据结构进行统一适配,大大增加了项目的稳定性,提高开发效率。
步骤6,在项目中当接口向服务端请求数据回调时,项目会调用到handleOriginalData:函数处理数据,而此时通过步骤4已将该函数的函数指针替换为hs_handleOriginalData:的函数指针,因此最终的函数调用链会传递到hs_handleOriginalData:的函数实现中去,然后在hs_handleOriginalData:函数中去调用步骤3中的hs_setAdaptRule:函数,通过在步骤3中已经设置好的适配规则对数据进行标准化的统一处理,经过hs_setAdaptRule:函数处理过的数据已经是符合适配规则的标准数据,可以供功能页面安全使用。
当服务端数据结构发生新的变更类型时,只需在步骤3中的适配器规则中新增一条适配规则,并对该条适配规则进行代码逻辑实现即可,不影响任何功能页面。
开发者在不修改相关开发页面的代码逻辑下完成了对数据结构变更的适配。由于数据和页面通过适配器进行了一个分离,在数据结构变更时,只需要对适配器做一个修改,增加一个新的适配规则就可以完成对功能页面的适配,不需要去修改页面逻辑或者底层数据,这样减轻了开发量,增加了项目稳定性。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案。
Claims (9)
1.用于iOS中不同接口数据结构类型的适配器,其特征在于,对不同服务端接口的数据按照预设适配规则进行适配并输出适配后的标准数据,所述预设适配规则为数据层级适配规则和数据名称适配规则且两者顺序执行,所述数据层级适配规则用于将不同服务端返回的code码层和data数据层放到同一个层级,所述数据名称适配规则用于将不同服务端返回的数据名称命名进行统一。
2.根据权利要求1所述用于iOS中不同接口数据结构类型的适配器,其特征在于,所述数据层级适配规则为:遍历与code码层同层级的所有数据,直到找到data数据层,然后将data数据层的所有数据作为一个NSDictionary类型的对象通过原生函数setValue:forKey:以键值对的形式存储到code码层所在的层级。
3.根据权利要求2所述用于iOS中不同接口数据结构类型的适配器,其特征在于,遍历与code码层同层级的所有数据后,如未发现data数据层,则继续遍历code码层的下一层或上一层,直到找到data数据层。
4.根据权利要求1所述用于iOS中不同接口数据结构类型的适配器,其特征在于,所述数据名称适配规则为遍历所有数据并将所有数据名称统一为“驼峰”写法。
5.根据权利要求4所述用于iOS中不同接口数据结构类型的适配器,其特征在于,通过“正则表达式”对所有数据进行遍历匹配,如匹配到“匈牙利”写法的数据就将其名称中的“_”下划线删除,并将下划线后的一个英文字母转换成大写。
6.根据权利要求1所述用于iOS中不同接口数据结构类型的适配器,其特征在于,在服务端数据结构发生新的变更类型时,在所述预设适配规则中新增针对新的变更类型的适配规则。
7.用于iOS中不同接口数据结构类型的适配方法,其特征在于,在接口向服务端请求数据回调时,通过预设适配规则对回调的数据进行适配后输出标准数据;在适配时,先执行数据层级适配规则,将不同服务端返回的code码层和data数据层放到同一个层级;再执行数据名称适配规则,将所有数据名称统一为“驼峰”写法。
8.根据权利要求7所述用于iOS中不同接口数据结构类型的适配方法,其特征在于,所述适配方法进一步包括:
步骤1,添加NSDictionary分类文件;
步骤2,在NSDictionary分类文件中添加load()函数;
步骤3,在NSDictionary分类文件中添加hs_setAdaptRule:函数,在该函数中配置全局的数据适配规则,包括数据层级适配规则和数据名称适配规则;
步骤4,在NSDictionary分类文件中,通过class_replaceMethod()函数替换掉项目中处理数据函数handleOriginalData:的函数指针;
步骤5,在NSDictionary分类文件中添加添加hs_handleOriginalData:函数,进行步骤2-4中各函数的调用,完成数据适配并输出标准数据。
9.根据权利要求8所述用于iOS中不同接口数据结构类型的适配方法,其特征在于,当服务端接口的数据结构类型发生变更时,在步骤3中修改预设适配规则,增加适用于发生变更的数据结构类型的适配规则。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210955296.7A CN115344247A (zh) | 2022-08-10 | 2022-08-10 | 用于iOS中不同接口数据结构类型的适配器及适配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210955296.7A CN115344247A (zh) | 2022-08-10 | 2022-08-10 | 用于iOS中不同接口数据结构类型的适配器及适配方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115344247A true CN115344247A (zh) | 2022-11-15 |
Family
ID=83952148
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210955296.7A Pending CN115344247A (zh) | 2022-08-10 | 2022-08-10 | 用于iOS中不同接口数据结构类型的适配器及适配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115344247A (zh) |
-
2022
- 2022-08-10 CN CN202210955296.7A patent/CN115344247A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10146532B2 (en) | Apparatus and method for detecting code cloning of software | |
CN107391104A (zh) | 一种客户端与react native代码的更新依赖管理方法、装置及系统 | |
US8364696B2 (en) | Efficient incremental parsing of context sensitive programming languages | |
US11593336B2 (en) | Data pipeline branching | |
US9311077B2 (en) | Identification of code changes using language syntax and changeset data | |
US20170315830A1 (en) | On-demand loading of dynamic scripting language code for reduced memory usage | |
US10248409B1 (en) | Limiting the effects of source code patches on corresponding native-code patches | |
CN107330014B (zh) | 一种数据表的创建方法与设备 | |
US20210365258A1 (en) | Method and system for updating legacy software | |
US9268755B2 (en) | Performing persistent undo and redo operation within computer software | |
WO2023087720A1 (zh) | 小程序生成方法、装置、设备及存储介质 | |
CN114489950A (zh) | 一种组件适配方法、装置、电子设备及存储介质 | |
CN115344247A (zh) | 用于iOS中不同接口数据结构类型的适配器及适配方法 | |
CN115756634A (zh) | 数据库对象关系映射模型建立方法、装置、设备及介质 | |
CN115437641A (zh) | 基于接口数据的代码生成方法、装置、设备及存储介质 | |
CN114138815A (zh) | 一种应用程序的多数据库兼容实现方法、设备及介质 | |
CN114564228A (zh) | 一种应用程序更新方法、装置、计算机设备及存储介质 | |
CN109857380B (zh) | 一种工作流文件编译方法及装置 | |
CN112883044A (zh) | 用于数据库的数据处理方法、装置及计算机可读介质 | |
CN112328241A (zh) | 一种应用程序开发中创建Android库模块依赖关系的方法及装置 | |
US10997056B1 (en) | Generation of explanatory and executable repair examples | |
CN117349267B (zh) | 一种数据库迁移处理方法及系统 | |
Parsons | A high‐level job control language | |
CN111061467B (zh) | 一种前端工程请求模块高效管理的方法 | |
CN116257286B (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 |