一种基于iOS平台的事件引擎和数据引擎的运作方法
技术领域
本发明涉及软件界面搭建技术领域,更具体的说,它涉及一种基于iOS平台的事件引擎和数据引擎的运作方法。
背景技术
苹果iOS App的原生开发都是基于Objective-C语言。该语言在标准C语言基础上加入了面向对象的特性,并引入了Smalltalk式的消息传递机制。Objective-C目前属于苹果公司的商标,因为有了苹果公司带来的移动互联网的生态出现,最近几年,大量开发人员慢慢开始转向学习新的Objective-C语言,但其学习难度对大部分人员来说苦不堪言,只有少数人能非常熟练准确地掌握和精通。
苹果为开发人员提供了可视化的开发工具Xcode,开发人员可以用拖拽的方式创建自己需要的界面(包括控件,排列布局,尺寸)等,但一个App有些时候需要大量的交互界面如数据查询界面,如果每个界面要每次在开发的时候创建,效率非常低而且容易出错,为此我急需发展了一套简单配置就能快速编写一个成熟可靠的iOS App的事件引擎和数据引擎。
发明内容
本发明克服了现有技术的不足,提供一种基于iOS平台的事件引擎和数据引擎的运作方法。
本发明的技术方案如下:
一种基于iOS平台的事件引擎和数据引擎的运作方法,具体包括如下步骤:
101)获取注册的事件声明步骤:事件引擎从配置文件中读取事件及其方法签名,并自动生成对象实例;该对象实例会继承事件引擎超类BtnSvc,由超类BtnSvc完成部分初始化的工作;
102)收集当前界面的所有控件数值步骤:超类BtnSvc获取当前界面的所有控件的数值,为开发人员提供全面处理业务逻辑的作用;
103)执行动画效果步骤:在用户任意点击某个按钮时,系统会执行相应事件引擎提供的动画效果,以提升用户的交互舒适度;
104)激活并执行事件步骤:通过iOS平台的反射机制根据配置好的事件引擎的中心的类名及方法,来创建新对象并执行具体的事件方法;事件方法的类要继承超类BtnSvc,事件引擎会对按钮行为做一次执行流程,触发数据引擎,完成和服务端的关系型数据库RDBMS的自动化管理;其中,执行时附带的参数包括:界面上所有控件的值,且以Map方式存储;按钮对象,即点击操作的视图对象;主键值;
105)接收并显示返回结果步骤:事件方法若执行成功,返回结果,用户选择是否显示结果,以及何种效果的界面进行显示结果;如果该返回结果成功后会触发进一步业务流程,则继续跳转到下一个对应界面;
事件方法若执行失败,抛出异常,其中判断是否为自定义异常,如果是自定义异常,则送至异常处理器进行统一处理;如果属于系统运行异常,则统一在事件引擎中处理,并记入日志;
106)指向新界面步骤:事件引擎读取事先配置好的界面ID,获取界面对象信息,根据界面ID选择对应的需要呈现的界面。
进一步的,触发数据引擎,完成和服务端的关系型数据库RDBMS的自动化管理的具体过程如下:
首先事件引擎读取配置好的SQL事件,并根据不同业务场景进行组装;数据引擎解析SQL语法并校验合法性;再加密将信息传输到服务端,服务端接收信息并解密解析SQL语句,送到数据库系统并执行,且将执行结果转到结果类进行组装返回;接着前端收到结果并再次组装成对象结构,将对象结构化数据送到事件引擎的对应界面中进行显示。
本发明相比现有技术优点在于:本发明提供了能帮助开发人员快速构建一个苹果iOS App的事件引擎和数据引擎。基于对于苹果iOS平台的深刻理解和实践应用,创建事件引擎,除了获取标准的事件处理及参数,还会附带更多的参数如界面所有控件的数值,上下文的环境参数等,自定义超类BtnSvc来加快实现界面所有控件的数值,上下文的环境参数等的处理,提高开发简易度和执行效率。同时把事件的关联等操作用配置文件进行了标准化,让开发更为简单,上手更快。数据引擎完成和服务端的关系型数据库RDBMS自动化管理。开发人员只需要了解基本的SQL语法,就可以轻松的使用iFrame数据引擎进行操作。
附图说明
图1为本发明的事件引擎流程图;
图2为本发明的事件引擎的激活并执行的结构图;
图3为本发明的事件引擎的指向新界面的结构图;
图4为本发明的数据引擎的结构图;
图5为本发明的超类BtnSvc的结构图;
图6为本发明的界面图;
图7为本发明的获取界面信息的图;
图8为本发明的执行后的界面图;
图9为本发明的invoke()的处理流程图;
图10为本发明的back()的处理流程图;
图11为本发明的控件流程图;
图12为本发明的控件原排序显示界面图;
图13为本发明经过一段时间使用后控件排序显示界面图;
图14为本发明的数据库的结构图。
具体实施方式
下面详细描述本发明的实施方式,其中自始至终相同或类似的标号表示相同或类似的元件或类似功能的元件。下面通过参考附图描述的实施方式是示例性的,仅用于解释本发明而不能作为对本发明的限制。
本技术领域技术人员可以理解的是,除非另外定义,这里使用的所有术语(包括技术术语和科技术语)具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样的定义,不会用理想化或过于正式的含义来解释。
各实施方式中提到的有关于步骤的标号,仅仅是为了描述的方便,而没有实质上先后顺序的联系。各具体实施方式中的不同步骤,可以进行不同先后顺序的组合,实现本发明的发明目的。
下面结合附图和具体实施方式对本发明进一步说明。
实施例1:
如图1至图10所示,一种基于iOS平台的事件引擎和数据引擎的运作方法,具体包括如下步骤:
101)获取注册的事件声明步骤:事件引擎从配置文件中读取事件及其方法签名,并自动生成对象实例;该对象实例会继承事件引擎超类BtnSvc,由超类BtnSvc完成部分初始化的工作。
102)收集当前界面的所有控件数值步骤:超类BtnSvc获取当前界面的所有控件的数值,为开发人员提供全面处理业务逻辑的作用;这样会省去开发者大量的代码量并同时保证准确性,即收集的目的是为了让业务开发人员能全面的处理其业务逻辑。
其中,超类BtnSvc,包括invoke()、refreshUI()、rethrowExceptionByDynamiclnvoke()、back()四个公用方法。具体定义如下:
refreshUI()设置必要的界面参数,并根据界面上的按钮触发事件,读取配置文件进行界面动作。具体refreshUI()设置如下:
invoke()该方法执行时,将根据界面业务场景接收传递的参数值,并新建对象实例,执行配置好的方法,获得返回值返回。具体invoke()设置如下:
rethrowExceptionByDynamiclnvoke()将用于在本超类中处理异常,进行异常提示。
Back()为处理界面的返回动作。具体过程包括首先判断界面内是否配置了专门的返回处理器,若有则执行专门返回处理器,若无则判断当前界面是否为特定推动界面;若是特定推动界面则直接做界面返回,若否则执行返回动画,并进行配置界面参数,刷新界面,再读取配置文件的目标界面,重新定向到目标界面。具体配置如下:
103)执行动画效果步骤:在用户任意点击某个按钮时,系统会执行事件引擎提供的动画效果,以提升用户的交互舒适度;即在用户点击某个按钮时,系统会呈现出短暂的动画界面,以提升用户的交互舒适度。事件引擎默认提供了多种动画效果配置,开发人员只需要在配置文件中指定就可。
104)激活并执行事件步骤:通过iOS平台的反射机制根据配置好的事件引擎的中心的类名及方法,来创建新对象并执行具体的事件方法;事件方法的类要继承超类BtnSvc,事件引擎会对按钮行为做一次执行流程,触发数据引擎,完成和服务端的关系型数据库RDBMS的自动化管理。其中,继承超类BtnSvc的事件方法执行时附带的参数包括:界面上所有控件的值,且以Map方式存储;按钮对象,即点击操作的视图对象;主键值,主键有可能ID或对象,还有其它常规的参数等。
如图6、图7所示,进行具体说明,通过保存按钮,会将界面上所有控件的值都读取出来放入一个Map中。数据引擎会根据事先XML中配置好的请求接口构建Http请求,数据引擎会压缩打包数据送往服务端和后台RDBMS系统进行执行。如图8所示,事件引擎接收执行结果,如执行成功,清除界面进行下一步,具体如下105)步骤。
105)接收并显示返回结果步骤:事件方法若执行成功,返回结果,用户选择是否显示结果,以什么方式的界面显示结果(何种效果的界面进行显示结果);如果该返回结果成功后会触发进一步业务流程,则继续跳转到下一个对应界面。
事件方法若执行失败,抛出异常,其中判断是否为自定义异常,如果是自定义异常,则送至异常处理器统一处理;如果属于系统运行异常,则统一在事件引擎中处理,并记入日志。
106)指向新界面步骤:事件引擎读取事先配置好的界面ID,获取新界面对象信息,根据界面类型选择不同的呈现界面。
iOS平台上的事件可以简单理解成用户在界面视图上的每一次点击或滑动。iOS平台上会向界面控件发送一次消息,消息传递时会带上一系列相关的参数如常规包括的点击的坐标等。而本方案中的事件引擎则更进一步,除了标准的事件处理及参数,会附带更多的参数如界面所有控件的数值,上下文的环境参数等,同时把事件的关联等操作用配置文件进行了标准化,让开发更为简单,上手更快。
其中,触发数据引擎,完成和服务端的关系型数据库RDBMS的自动化管理。使得开发人员只需要了解基本的SQL语法,就可以轻松的使用数据引擎进行操作。具体过程如下:
首先事件引擎读取配置好的SQL事件,并根据不同业务场景进行组装;数据引擎解析SQL语法并校验合法性;再加密将信息传输到服务端,服务端接收信息并解密解析SQL语句,送到数据库系统并执行,且将执行结果转到结果类进行组装返回;接着前端收到结果并再次组装成对象结构,将对象结构化数据送到事件引擎的对应界面中进行显示。
实施例2:
如图1至图10所示,界面设置的控件还包括事件引擎和数据引擎,其具体的运作方法包括如下步骤:
101)获取注册的事件声明步骤:事件引擎从配置文件中读取事件及其方法签名,并自动生成对象实例;该对象实例会继承事件引擎超类BtnSvc,由超类BtnSvc完成部分初始化的工作。
102)收集当前界面的所有控件数值步骤:超类BtnSvc获取当前界面的所有控件的数值,为开发人员提供全面处理业务逻辑的作用;这样会省去开发者大量的代码量并同时保证准确性,即收集的目的是为了让业务开发人员能全面的处理其业务逻辑。
其中,超类BtnSvc,包括invoke()、refreshUI()、rethrowExceptionByDynamiclnvoke()、back()四个公用方法。具体定义如下:
refreshUI()设置必要的界面参数,并根据界面上的按钮触发事件,读取配置文件进行界面动作。具体refreshUI()设置如下:
invoke()该方法执行时,将根据界面业务场景接收传递的参数值,并新建对象实例,执行配置好的方法,获得返回值返回。具体invoke()设置如下:
rethrowExceptionByDynamiclnvoke()将用于在本超类中处理异常,进行异常提示。
Back()为处理界面的返回动作。具体过程包括首先判断界面内是否配置了专门的返回处理器,若有则执行专门返回处理器,若无则判断当前界面是否为特定推动界面;若是特定推动界面则直接做界面返回,若否则执行返回动画,并进行配置界面参数,刷新界面,再读取配置文件的目标界面,重新定向到目标界面。具体配置如下:
103)执行动画效果步骤:在用户任意点击某个按钮时,系统会执行事件引擎提供的动画效果,以提升用户的交互舒适度;即在用户点击某个按钮时,系统会呈现出短暂的动画界面,以提升用户的交互舒适度。事件引擎默认提供了多种动画效果配置,开发人员只需要在配置文件中指定就可。
104)激活并执行事件步骤:通过iOS平台的反射机制根据配置好的事件引擎的中心的类名及方法,来创建新对象并执行具体的事件方法;事件方法的类要继承超类BtnSvc,事件引擎会对按钮行为做一次执行流程,触发数据引擎,完成和服务端的关系型数据库RDBMS的自动化管理。其中,继承超类BtnSvc的事件方法执行时附带的参数包括:界面上所有控件的值,且以Map方式存储;按钮对象,即点击操作的视图对象;主键值,主键有可能ID或对象,还有其它常规的参数等。
如图6、图7所示,进行具体说明,通过保存按钮,会将界面上所有控件的值都读取出来放入一个Map中。数据引擎会根据事先XML中配置好的请求接口构建Http请求,数据引擎会压缩打包数据送往服务端和后台RDBMS系统进行执行。如图8所示,事件引擎接收执行结果,如执行成功,清除界面进行下一步,具体如下105)步骤。
105)接收并显示返回结果步骤:事件方法若执行成功,返回结果,用户选择是否显示结果,以什么方式的界面显示结果(何种效果的界面进行显示结果);如果该返回结果成功后会触发进一步业务流程,则继续跳转到下一个对应界面。
事件方法若执行失败,抛出异常,其中判断是否为自定义异常,如果是自定义异常,则送至异常处理器统一处理;如果属于系统运行异常,则统一在事件引擎中处理,并记入日志。
106)指向新界面步骤:事件引擎读取事先配置好的界面ID,获取新界面对象信息,根据界面类型选择不同的呈现界面。
iOS平台上的事件可以简单理解成用户在界面视图上的每一次点击或滑动。iOS平台上会向界面控件发送一次消息,消息传递时会带上一系列相关的参数如常规包括的点击的坐标等。而本方案中的事件引擎则更进一步,除了标准的事件处理及参数,会附带更多的参数如界面所有控件的数值,上下文的环境参数等,同时把事件的关联等操作用配置文件进行了标准化,让开发更为简单,上手更快。
其中,触发数据引擎,完成和服务端的关系型数据库RDBMS的自动化管理。使得开发人员只需要了解基本的SQL语法,就可以轻松的使用数据引擎进行操作。具体过程如下:
首先事件引擎读取配置好的SQL事件,并根据不同业务场景进行组装;数据引擎解析SQL语法并校验合法性;再加密将信息传输到服务端,服务端接收信息并解密解析SQL语句,送到数据库系统并执行,且将执行结果转到结果类进行组装返回;接着前端收到结果并再次组装成对象结构,将对象结构化数据送到事件引擎的对应界面中进行显示。
如图14所示,具体对于数据引擎的执行的数据在存储上,采用mysql数据库,并基于mysql建立异步双向的异地双活容灾方式,其包括服务机房、调度模块,服务机房包括第一服务机房、第二服务机房。
第一服务机房、第二服务机房提供客户数据的存储。第一服务机房、第二服务机房之间通过互联网线路联通,且两者处于不同地方,达到异地容灾效果,在传统异地容灾设计中要求机房间的信息传输采用专线,整体成本很高,而本方案只要通过普通的互联网线路进行联通即可。具体的,第一服务机房、第二服务机房内设置的云平台操作系统中设置mysql,通过mysql的异步复制机制在第一服务机房、第二服务机房之间进行数据的同步,通过mysql中自带的机制来实现数据的同步,因为此机制数据传输的准确性高,数据传输时的要求低,通过普通互联网线路就可。
第一服务机房、第二服务机房双活,即采用第一服务机房、第二服务机房同时都在使用,确保在发生故障的情况下,备用的服务机房是可以正常运作的,且数据是最新的。比如一共1万客户,5千由第一服务机房提供服务,另外5千由第二服务机房提供服务。双活保证了切换可用性,克服了传统的同城容灾、异地容灾、两地三中心这几种中的容灾备份中,备用装置本身可能已经发生故障的问题。即传统方法大部分备用装置是冷备,平时不在使用,当灾难发生时无法保证可用性,而本方案是双活,保证了切换可用性。冷备还造成了资源的极大浪费,而本方案双活同时在用,达到资源的合理利用。
调度模块将不同客户变动的数据集中在与其对应的服务机房中,当对应服务机房发生故障时,客户变动的数据才会由另一服务机房提供相应服务。即同一个客户的数据在服务机房不发生任何故障的情况下,其所有访问产生的数据变更都只会在同一个服务机房内,如客户A其一开始数据服务是由第一服务机房提供的,则在第一服务机房不发生故障的情况下,客户A只会连接第一服务机房,由第一服务机房进行相应的服务,而第二服务机房只是进行数据的同步。
其中,调度模块包括分配模块和数据模块。分配模块至少包含三个以上流量入口,流量入口设置在网络独立的其它机房内,其作用是分配客户对应连接的服务机房和保障与服务机房的联通,实现客户稳定的连接与其对应的服务机房,在具体实施过程中,分配模块是按就近原则进行分配客户去合适的服务机房,一经分配,在无故障的情况下就不会变动。数据模块进行数据格式和加密方式的统一,确保服务机房之间数据的互传与统一,以此可以实现跨云台的数据传输,无需进行相应数据适应云平台的变化。例如第一服务机房是腾讯云平台,第二服务机房是阿里云服务平台,有了数据模块后,云服务平台之间的数据就有了统一的标准进行传输加密和解析,大大降低了运营维护成本和搭建成本。
调度模块还包括处理模块,分配模块与服务机房进行连接,并反馈连接情况给处理模块。其中分配模块的流量入口每隔一定时间(一般以每10秒进行一次)进行与服务机房的联通判断,当出现2/3个流量入口反馈为无法与服务机房联通时,将判定为对应的服务机房发生故障,自动引发一次灾备切换,即所有流量入口都与第一服务机房、第二服务机房联通,所有流量入口都每隔一定时间就与第一服务机房、第二服务机房进行联通,确保第一服务机房、第二服务机房是可联通可使用的,一旦有2/3个及以上流量入口反馈第一服务机房无法联通,则判定第一服务机房发生故障,所有客户的数据访问将由第二服务机房来提供服务。发生故障的切换过程中主要是进行数据的增量复制,将发生故障的第一服务机房的客户从第一服务机房切到第二服务机房,这两部分。根据实际检验,采用了mysql的异步复制机制后,数据的增量复制不会超过半分钟,在整个故障切换过程中前后不超过一分钟即可完成;而传统的方式并不采用异步复制机制,使得会容易出现业务的中断,在一切顺利的情况下也需要两分钟左右的时间,本方案采用mysql的异步复制机制是不会中断业务,业务执行业务的指令,复制执行复制的指令,不会相互干涉,且十分适合本方案中的广域网此类不稳定的网络环境,不仅实现大大提高了客户在使用过程中的舒适度,而且切换时产生的延时也基本不会影响到客户的正常使用。
作为优选,本方案还包括ID发生器,ID发生器与服务机房有关,第一服务机房、第二服务机房内的客户ID不重复且ID值与相应服务机房相关,便于客户与相应服务机房的匹配。即为了防止数据冲突,各机房有一个ID发生器,一般按奇偶分开的原则生成,比如第一服务机房生成奇数ID,第二服务机房产生偶数ID,双向复制保证了数据的自动回流,待故障恢复时只要恢复原来的服务分配即可。
作为优选,第一服务机房、第二服务机房内都设置两个数据实例进行运作,即第一服务机房、第二服务机房内分别都设置两套服务设备进行服务,两套服务设备之间同样采用类似第一服务机房、第二服务机房之间的数据服务,具体如第一服务机房服务的5千客户分成两批由两套设备进行固定的数据服务,相互之间也采用mysql的异步复制机制进行数据同步。以此大大提高容灾能力,减少误判带来的问题。
如图11至图13所示,具体的按钮控件采用新的设计结构,具体建立包括如下步骤:
101)新控件设置步骤:将显示提醒文本控件和输入文本控件集合在一个新控件内,显示提醒文本设置在新控件的左上方,输入文本设置在新控件居中位置。或者设置另一种新控件,在原新控件上还包括列表展开控件,列表展开控件设置在新控件的右侧,输入文本内置列表,即输入文本内可通过模糊查询对列表内的内容进行搜索确认用户想输入之内容。包括列表展开控件的新控件,具体的如门店显示,有些商家有100多家店,有些商家就小于10家店,此新控件对调出门店,既可以自己输入搜索弹出,也可以点击后面的按钮显示列表搜索的内容。实践中,可设计一部分通用的新控件供用户选择,减少用户自己填写新控件。
102)自动排序步骤:用户根据自身需要设置新控件数量,每个新控件设置三个指标,并通过三个指标的多次数值排序,来进行整体新控件的排序。其中指标包括控件累计使用次数P(t)、与相邻控件不可分割性P(d)、控件静态位置值P(s)。初始时P(t)=0,P(d)由用户定义,并设置其与其它对应新控件的位置属性,P(s)由用户建立新控件顺序决定。
排序首先根据控件静态位置值P(s)的大小顺序进行排序,再根据用户使用情况以之前排序顺序为前提,由控件累计使用次数P(t)进行重新顺序调整,最后根据与相邻控件不可分割性P(d)和用户选择新控件数量进行排序调整,得到最终排序结构。
具体的,对于用户根据需要先选定部分通用新控件,再自己填写一部分新控件,新控件的显示以新控件选取顺序和填写新控件的顺序来定义控件静态位置值P(s)的大小,以此大小顺序进行排序显示。因首次控件累计使用次数P(t)都为零,则根据与相邻控件不可分割性P(d)进行调整,如新控件的显示提醒文本A与新控件的显示提醒文本B为不可分割的配合组件,故显示提醒文本A的新控件的与相邻控件不可分割性P(d)值为B,且以新增属性N、P来确定显示提醒文本A与显示提醒文本B的位置关系,N表示显示提醒文本A在显示提醒文本B左侧,P表示显示提醒文本A在显示提醒文本B右侧。无相互配合的显示提醒文本的新控件的与相邻控件不可分割性P(d)为空。因本方案以两组显示为标准,则当出现新控件第一组数量为奇数时,在划分第一组新控件时出现与相邻控件不可分割性P(d)的控件,优先进行在第一组中的显示。即如有新控件5个,但排序第一、第二的新控件则为独立新控件时,且第三新控件与第四新控件则为不可分割组合新控件时,第三新控件、第四新控件分在第二组中,第一、第二、第五新控件分在第一组中,得到用户第一界面显示的最终排序结构。
当用户使用达到一定次数后,新控件通过控件累计使用次数P(t)大于一定值的,将其以使用次数的大小进行新控件的排序,再根据与相邻控件不可分割性P(d)进行调整,以得到最终排序结构。
103)绘制定位步骤:根据步骤102)得到的最终排序结构进行界面绘制,新控件平均分成两组,若新控件总数为奇数则第一组多一个新控件,其中每一组为一行,进行行绘制时,第一组每个新控件间采用公式x+=x偏移量、y=0,来进行定位分隔;第二组采用x+=x偏移量、y=新控件行高+y偏移量,来进行定位分隔。
如用户为配货员,其最终形成了,“客户,日期从,日期到,批次从,批次到,门店,店员,配货,发货仓库,订货号,是否发货”这11个字段,分2行显示,每行为6个和5个新控件。其中“配货,发货仓库,是否发货,门店”的控件累计使用次数P(t)随着使用频率而值增大,并达到一定数值,则将其移到最前面显示,形成“配货,发货仓库,是否发货,门店,客户,店员,日期从,日期到,批次从,批次到,订货号”为顺序的查询界面,因为第7个字段“日期到”,因为其与相邻控件不可分割性P(d)有值,所以会被移到第二组中显示,“客户”被移到第一组中。
在实际中,还可通过权限设置,直接对已经排布顺序的新控件进行显示提醒文本的改动。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员,在不脱离本发明构思的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明保护范围内。