建立属性访问的方法、介质、装置和计算设备与流程

文档序号:14554383阅读:145来源:国知局
建立属性访问的方法、介质、装置和计算设备与流程

本发明的实施方式涉及数据访问领域,更具体地,本发明的实施方式涉及一种建立属性访问的方法、介质、装置和计算设备。



背景技术:

本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。

在整个数据访问领域中,现有技术可以针对某种特定的数据源,定制化地自定义一个数据模型基类,实现对该特定的数据源的属性的访问。并且,可以通过子类继承的方式追加属性,以实现通过属性访问的方法全面访问该特定数据源的目的。

然而,这种数据访问方式通常存在工程侵入性强、不同种类的数据源的属性访问映射能力存在互斥、以及属性访问映射策略不够灵活等缺点。

工程侵入性强,体现在对象必须通过子类继承特定基类的方式来获得该特定数据源的属性访问映射能力。已有的项目中存在大量数据模型的类,这些数据模型的类可能已经继承于某个基类,且不能继承自其它基类。因而对象无法通过继承的方式获得属性访问映射能力。

不同种类的数据源的属性访问映射能力存在互斥,体现为对象必须通过强继承的方式获得该特定数据源的属性访问映射能力。如果想要一个数据模型,既能属性访问数据源a,也能访问数据源b,甚至数据源c,需要同时继承多个基类,在现有技术中,只能通过重构的方式实现,成本较高。

属性访问映射策略不够灵活,体现为无法轻量级的实现多个数据源的组合访问策略,也不能实现数据源的动态部署能力。



技术实现要素:

为此,非常需要一种改进的属性访问方法,以使对特定数据源进行属性访问时不需要通过强继承的方式追加属性,可应用属性于该特定数据源的所有的类,并且工程侵入性低。

在本发明实施方式的第一方面中,提供了一种建立属性访问的方法。所述方法包括获取数据模型中的类所包括的全部属性,以及建立所述全部属性中的每一个属性与至少一个属性特征的关联关系。

在本发明的一个实施例中,该获取数据模型中的类所包括的全部属性包括:通过递归遍历的方式,获取所述数据模型中所有类型及其父类所对应的属性。

在本发明的另一实施例中,所述递归遍历的递归截止点为所述数据模型的数据模型基类,或者所述数据模型的元类。

在本发明的又一实施例中,该建立属性访问的方法还包括存储所述关联关系。

在本发明的再一个实施例中,该建立属性访问的方法还包括:接收访问所述数据模型的第一属性的指令,所述第一属性为所述全部属性中的任意一个属性;根据所述关联关系,确定所述第一属性的属性特征;以及根据所述第一属性的属性特征,对所述第一属性进行访问。

在本发明的再一个实施例中,当所述第一属性的属性特征包括运行动态绑定时,根据所述第一属性的属性特征,对所述第一属性进行访问之前,所述方法还包括:确定是否存在与所述第一属性动态绑定的至少一个数据源代理协议,所述数据源代理协议用于将所述数据模型与包括所述第一属性的至少一个数据源相关联。

在本发明的再一个实施例中,在存在与所述第一属性动态绑定的至少一个数据源代理协议的情况下,根据所述第一属性的属性特征,对所述第一属性进行访问,包括:访问与所述第一属性动态绑定的至少一个数据源代理协议,以及通过所述数据源代理协议从所述至少一个数据源中访问所述第一属性。

在本发明的再一个实施例中,访问与所述第一属性动态绑定的至少一个数据源代理协议之前,还包括建立所述数据源代理协议;以及将所述第一属性与所述数据源代理协议动态绑定。

在本发明的再一个实施例中,在不存在与所述第一属性动态绑定的至少一个数据源代理协议的情况下,根据所述第一属性的属性特征,对所述第一属性进行访问,包括:访问与所述第一属性动态绑定的至少一个关联对象代理协议,所述关联对象代理协议用于对所述数据模型中的类添加所述第一属性;以及通过所述关联对象代理协议访问所述第一属性。

在本发明的再一个实施例中,访问与所述第一属性动态绑定的至少一个关联对象代理协议之前,还包括:创建所述关联对象代理协议;以及将所述第一属性与所述关联对象代理协议动态绑定。

在本发明的再一个实施例中,根据所述第一属性的属性特征,对所述第一属性进行访问,包括:以键值对方式访问所述第一属性。

在本发明的再一个实施例中,以键值对方式访问所述第一属性,包括以所述键值对方式读取所述第一属性的值、或者以所述键值对方式写入所述第一属性的值。

在本发明的再一个实施例中,以所述键值对方式读取所述第一属性的值,包括根据所述指令确定关键字、通过该关键字查找所述第一属性、以及读取所述第一属性的值。

在本发明的再一个实施例中,以所述键值对方式写入所述第一属性的值,包括根据所述指令确定关键字和与该关键字对应的值、通过该关键字查找所述第一属性、以及将所述关键字对应的值写入所述第一属性。

在本发明实施方式的第二方面中,提供了一种建立属性访问的介质,其上存储有可执行指令,所述指令在被处理器执行时使处理器执行上述的建立属性访问的方法。

在本发明实施方式的第三方面中,提供了一种建立属性访问的装置。所述装置包括属性获取模块和属性特征关联模块。属性获取模块用于获取数据模型中的类所包括的全部属性。属性特征关联模块用于建立所述全部属性中的每一个属性与至少一个属性特征的关联关系。

在本发明的一个实施例中,所述属性获取模块获取数据模型中的类所包括的全部属性,包括通过递归遍历的方式获取所述数据源中所有类型及其父类所对应的属性。

在本发明的另一个实施例中,所述递归遍历的递归截止点为所述数据模型的数据模型基类、或者所述数据模型的元类。

在本发明的又一个实施例中,所述装置还包括存储模块。所述存储模块用于存储所述关联关系。

在本发明的再一个实施例中,所述装置还包括访问指令接收模块、属性特征确定模块以及访问模块。访问指令接收模块用于接收访问所述数据模型的第一属性的指令,所述第一属性为所述全部属性中的任意一个属性。属性特征确定模块用于根据所述关联关系,确定所述第一属性的属性特征。访问模块用于根据所述第一属性的属性特征的内容,对所述第一属性进行访问。

在本发明的再一个实施例中,所述装置还包括数据源代理协议确定模块。数据源代理协议确定模块用于当所述第一属性的属性特征的内容为运行动态绑定时,确定是否存在与所述第一属性动态绑定的至少一个数据源代理协议,所述数据源代理协议用于将所述数据模型与包括所述第一属性的至少一个数据源相关联。

在本发明的再一个实施例中,所述访问模块包括数据源代理协议访问子模块和第一访问子模块。数据源代理访问子模块用于在存在与所述第一属性动态绑定的至少一个数据源代理协议的情况下,访问与所述第一属性动态绑定的至少一个数据源代理协议。第一访问子模块通用于通过所述数据源代理协议从所述至少一个数据源中访问所述第一属性。

在本发明的再一个实施例中,所述访问模块还包括数据源代理协议建立子模块、和数据源代理协议动态绑定子模块。数据源代理协议建立子模块用于建立所述数据源代理协议。数据源代理动态绑定子模块用于将所述第一属性与所述数据源代理协议动态绑定。

在本发明的再一个实施例中,所述访问模块包括关联对象代理访问子模块和第二访问子模块。关联对象代理访问子模块用于在不存在与所述第一属性动态绑定的至少一个数据源代理协议的情况下,访问与所述第一属性动态绑定的至少一个关联对象代理协议,所述关联对象代理协议用于对所述数据模型的类添加所述第一属性。第二访问子模块用于通过所述关联对象代理协议访问所述第一属性。

在本发明的再一个实施例中,所述访问模块还包括关联对象代理协议创建子模块和关联对象代理动态绑定子模块。关联对象代理创建子模块用于创建所述关联对象代理协议。关联对象代理动态绑定子模块用于将所述第一属性与所述关联对象代理协议动态绑定。

在本发明的再一个实施例中,访问模块根据所述第一属性的属性特征,对所述第一属性进行访问,包括以键值对方式访问所述第一属性。

在本发明的再一个实施例中,以键值对方式访问所述第一属性,包括以所述键值对方式读取所述第一属性的值、或者以所述键值对方式写入所述第一属性的值。

在本发明的再一个实施例中,以所述键值对方式读取所述第一属性的值,包括根据所述指令确定关键字、过该关键字查找所述第一属性、以及读取所述第一属性的值。

在本发明的再一个实施例中,以所述键值对方式写入所述第一属性的值,包括根据所述指令确定关键字和与该关键字对应的值、通过该关键字查找所述第一属性、以及将所述关键字对应的值写入所述第一属性。

在本发明实施方式的第四方面中,提供了一种计算设备,包括一个或多个存储器、以及一个或多个处理器。所述存储器上存储有可执行指令。所述处理器执行所述可执行指令,用以实现上述的建立属性访问的方法。

根据本发明实施方式的建立属性访问的方法和装置,可以对一个数据模型的全部类型及其父类的属性的特征进行收集分析,建立起该数据模型的类所包括的全部属性中每一个属性与属性特征之间的关联关系,从而,使该数据模型的对象获得了属性访问自定义映射的能力。

更进一步地,根据本发明实施方式的建立属性访问的方法和装置,只要调用过一次所述关联关系,即可让该数据模型的所有对象都具有该属性自定义映射的能力。

并且,根据本发明实施方式的建立属性访问的方法和装置,在对数据模型进行属性访问时,可以通过数据代理协议可以低成本的同时接入多个数据源,并可以按照具体的实际需要来制定相应的数据访问策略。

而且,根据本发明实施方式的建立属性访问的方法和装置,可以覆盖大部分开发中的数据访问需求,方便开发人员为类添加属性和方法,通常只需要简单声明一两行代码。从而,可极大的降低编写数据存取代码的开发成本,并且提高代码质量和可维护性。

附图说明

通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:

图1示意性地示出了根据本发明实施方式的建立属性访问方法和装置的应用场景示意图;

图2示意性地示出了根据本发明实施例的建立属性访问方法的流程图;

图3示意性地示出了根据本发明另一实施例的建立属性访问方法的流程图;

图4示意性地示出了根据本发明又一实施例的建立属性访问方法的流程图;

图5示意性地示出了根据本发明再一实施例的对所述第一属性进行访问的方法流程图;

图6a~6b示意性示出了实现根据本发明实施的方法的数据源代理的示例;

图7示意性地示出了根据本发明再一实施例的对所述第一属性进行访问的方法流程图.

图8a~8c示意性示出了根据本发明实施方式的建立属性访问方法的应用示例;

图9示例性示出了根据本发明实施例的建立属性访问的程序产品的示意图;

图10示意性示出了根据本发明实施例的建立属性访问的装置的框图;以及

图11示意性示出了根据本发明实施例的计算设备的框图。

在附图中,相同或对应的标号表示相同或对应的部分。

具体实施方式

下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本发明更加透彻和完整,并且能够将本发明的范围完整地传达给本领域的技术人员。

本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本发明可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。

根据本发明的实施方式,提出了一种建立属性访问的方法、介质、装置和计算设备。

在本文中,需要理解的是,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。

下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。

发明概述

本发明人发现,现有的属性访问方法中,对特定的数据源进行访问时只能通过继承某个特定的基类,才能够使该数据源的对象获得属性访问映射特性。而且这种继承是必须通过强继承的方式实现,并且现有的属性访问方法存在的工程侵入性强、属性访问映射不灵活等也限制了属性访问的使用范围。

本发明方案通过对一个数据模型进行一次属性分析,建立起该数据模型中的类的全部属性与其对应的属性特征之间的关联关系,从而使得该数据模型的所有对象均获得了通过该关联关系进行属性访问自定义映射的能力。具体操作可以包括对数据模型中的类所包括的全部属性的属性特征进行收集,并建立起该数据模型的类的全部属性中每一个属性与属性特征之间的关联关系。这样,只需要调用过一次该建立属性访问的分析方法,即可让该数据模型的所有对象的属性均建立其与对应的属性特征的关联关系。这样,可以极大地便利属性访问。

在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。

应用场景总览

首先参考图1。

图1示意性地示出了根据本发明实施方式的建立属性访问方法和装置的应用场景示意图。

如图1所示,用户终端11中安装有应用程序app,用户通过用户终端11中安装的app向网站服务器12发送网页获取请求,网站服务器12将用户请求的网页发送给用户终端11,由用户终端11中安装的app对接收到的网页信息进行展示。

用户在用户终端11的app上进行操作,对各种数据源进行访问。网站服务器12可以响应于用户操作,为用户提供各种数据访问的服务。

用户终端11和网站服务器12通过网络连接,该网络可以为局域网、广域网、移动互联网等。用户终端11可以为便携设备(例如:手机、平板、笔记本电脑等),也可以为个人电脑(pc,personalcomputer),网站服务器12可以为任何能够提供网站服务的服务器设备。

需要说明的是,本发明实施例所提供的建立属性访问的方法可以由网站服务器12执行。相应地,本发明实施例所提供的建立属性访问的装置一般可以设置于网站服务器12中。本发明实施例所提供的建立属性访问的方法也可以由不同于网站服务器12且能够与用户终端11和/或网站服务器12通信的其他网站服务器或网站服务器集群执行。相应地,本发明实施例所提供的建立属性访问的装置也可以设置于不同于网站服务器12且能够与用户终端11和/或网站服务器12通信的其他网站服务器或网站服务器集群中。当然,本发明实施例所提供的建立属性访问的方法也可以由用户终端11执行,更具体地,由安装在用户终端11上的app来执行。相应地,本发明实施例所提供的建立属性访问的装置也可以设置于用户终端11中。或者,本发明实施例所提供的建立属性访问的方法也可以部分由用户终端11执行,部分由网站服务器12执行。相应地,本发明实施例所提供的建立属性访问的装置也可以部分设置于用户终端11中,部分设置于网站服务器12中。

应该理解,图1中的用户终端、网络和网站服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。

示例性方法

下面结合图1的应用场景,参考其他附图来描述根据本发明示例性实施方式的用于建立属性访问的方法。需要注意的是,上述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。

图2示意性地示出了根据本发明实施例的建立属性访问方法的流程图。

如图2所示,根据本发明实施例的建立属性访问的方法,包括操作s201和操作s202。

在操作s201,获取数据模型的类所包括的全部属性。

在操作s202,建立所述全部属性中的每一个属性与至少一个属性特征的关联关系。

根据本发明的实施例,所述属性特征可以包括所述属性的名称、属性的访问特性以及是否动态绑定等。

根据本发明的实施例,建立属性访问的方法可以应用于iphoneoperationsystem,ios系统以及其他相关的操作系统。

具体地,操作s201中获取数据模型的类所包括的全部属性可以是通过递归遍历的方式,获取所述数据模型的所有类型及其父类所对应的属性。

更进一步地,所述递归遍历的递归截止点可以是所述数据模型的数据模型基类、或者所述数据模型的元类。

根据本发明的实施例,建立属性访问的方法需要获取并分析所述数据模型的类所包括的全部属性。可以通过递归遍历的方式,查找获取该数据模型的所有类型及其父类所对应的属性。

为了避免与数据访问无关的属性被分析收集,可以指定所述数据模型的基类作为递归截止的特征点。如果没有指定所述数据模型的基类时,则可以以所述数据模型中所有类型的元类nsobject为递归截止。

操作s202中建立所述全部属性中的每一个属性与至少一个属性特征的关联关系,可以通过对每一个属性的属性特征进行分析,确定该每一个属性所具有的属性特征。这些属性特征包含且不限于属性的名称、对应的成员变量名、属性的类型、是否运行时动态绑定,get方法名(即读取对象的属性的值的方法的名称),set方法名(即写入或赋予对象的属性的值的方法的名称),访问特征(strong强访问、assign指定访问、weak弱访问、copy复制、nonatomic单原予访问等)。

根据每一个属性与至少一个属性特征的关联关系建立一系列索引,以优化在属性访问时方便快捷地获取到属性的属性特征。

根据本发明的实施例的建立属性访问的方法,可以在所述数据模型的基类首次被使用时执行,也可以在对象初始化时被执行,甚至也可以在对所述数据模型进行属性访问之前执行。

根据本发明的实施例的建立属性访问的方法,只要被执行过一次,即可使所述数据模型的全部对象获得属性访问自定义映射的能力。

图3示意性地示出了根据本发明另一实施例的建立属性访问方法的流程图。

如图3所示,根据本发明另一实施例的建立属性访问方法除操作s201和操作s202之后,还包括操作s303。

在操作s303,存储所述关联关系。

为了不限制对操作s202中建立的关联关系的调用,可以对所述关联关系进行缓存,从而使该关联关系等一系列索引的调用不受调用的数据模型以及调用时机的限制。

当然可以理解,如前所述关联关系可以是一系列索引中的一部分,因此,在存储所述关联关系的同时,还可以将该一系列索引中的其他映射关系同时存储,以备调用。

根据本发明实施例,该建立属性访问的方法,通过对待分析的所述数据模型进行一次属性分析,使得该数据模型的所有对象获得了属性访问自定义映射的能力,同时不会造成不必要的消耗。因为该建立属性访问的方法不限制该关联关系等一系列索引的调用的数据模型以及调用时机,打破了现有技术只能通过强继承的方式获得属性访问自定义映射能力的限制。

图4示意性地示出了根据本发明又一实施例的建立属性访问方法的流程图。

如图4所示,根据本发明又一实施例的建立属性访问方法除操作s201和操作s202外,还包括操作s403~操作s405。

在操作s403,接收访问所述数据模型的第一属性的指令,所述第一属性为所述全部属性中的任意一个属性。

在操作s404,根据所述关联关系,确定所述第一属性的属性特征。

在操作s405,根据所述第一属性的属性特征,对所述第一属性进行访问。

根据本发明的实施例,该建立属性访问方法对该数据模型进行属性访问时,可以根据访问指令中对应的第一属性的属性特征对第一属性进行属性访问,具有通用、普适的属性访问能力。

例如,当第一属性为不存在属性特征时(例如是该第一属性所述数据模型中已有的属性),可以通过现有技术中已有的访问方式从该数据模型中访问该第一属性。当第一属性具有属性特征,且为动态绑定时,可以从其他数据源处进行访问、或者通过给该数据模型的类添加该第一属性的方式进行访问。以此方式,可以实现进行通用的、普适的属性访问。

根据本发明的实施例,当所述第一属性的属性特征包括运行动态绑定时,在操作s405之前,所述建立属性访问方法还包括操作s406。

在操作s406,确定是否存在与所述第一属性动态绑定的至少一个数据源代理协议,所述数据源代理协议用于将所述数据模型与包括所述第一属性的至少一个数据源相关联。

根据本发明的实施例,操作s405访问所述第一属性,包括以键值对方式访问第一属性。

具体地,以键值对方式访问所述第一属性,包括以所述键值对方式读取所述第一属性的值(即键值对方式访问的get方法),或者以所述键值对方式写入所述第一属性的值(即键值对方式访问的set方法)。

以所述键值对方式读取所述第一属性的值,包括根据所述指令确定关键字、通过该关键字查找所述第一属性、以及读取所述第一属性的值。

以所述键值对方式写入所述第一属性的值,包括根据所述指令确定关键字和与该关键字对应的值、通过该关键字查找所述第一属性、以及将所述关键字对应的值写入所述第一属性。

具体地,操作s405的实现可以参考图5或者图7所示的两种不同的方法流程实现。

根据本发明一实施例,当所述第一属性的属性特征的内容为运行动态绑定时,在存在与所述第一属性动态绑定的至少一个数据源代理协议的情况下,操作s405可以通过图5所示的方法流程实现。

图5示意性地示出了根据本发明再一实施例中操作s405中对所述第一属性进行访问的方法流程图。

如图5所示,当所述第一属性的属性特征的内容为运行动态绑定时,在存在与所述第一属性动态绑定的至少一个数据源代理协议的情况下,操作s405可以包括操作s4151~操作s4152。

在操作s4151,访问与所述第一属性动态绑定的至少一个数据源代理协议。

在操作s4152,通过所述数据源代理访问所述至少一个据源中的所述第一属性。

根据本发明的实施例,操作s405对所述第一属性进行访问时,先访问与所述第一属性动态绑定的至少一个数据源代理,再通过所述数据源代理访问所述至少一个数据源中的所述第一属性。

根据本发明的实施例,通过该数据源代理可以同时访问一种或者多种数据源中的所述第一属性。

所述数据源可以包括数据文件、数据库、或者程序代码等。

所述数据源代理也可以在程序运行时动态置换,实现数据策略的动态部署。

所述数据源代理可以同时接入各种不同的数据源。

以此方式,进行数据访问时利用该数据源代理协议可以低成本的同时接入多个数据源,并可以按照具体的实际需要来制定相应的数据访问策略。

在一些实施例中,在操作s4151访问与所述第一属性动态绑定的至少一个数据源代理协议之前,还可以建立所述数据源代理协议,以及将所述第一属性与所述数据源代理协议进行动态绑定。

根据本发明的实施例,建立所述第一属性与所述数据源代理协议的动态绑定,从而使得可以通过所述数据源代理协议从一个或多个数据源中访问所述第一属性。

根据本发明的实施例,所述数据源代理协议可以根据第一属性,动态绑定第一属性与所述第一属性的get方法和set方法。

根据本发明的实施例,所述数据源代理协议也可以在程序运行时动态置换,实现数据策略的动态部署。在具体应用中,根据需求进行配置以选择何种数据源代理协议进行具体的访问。

下面参考图6a~6b的示意,结合具体实施例对图5所示的方法做进一步说明。

图6a~6b示意性示出了实现根据本发明实施的方法的数据源代理的示例。

例如,现有技术中,以键值对kvc方式(kvc是keyvaluecoding的简称,中文名为键值编码,是objective-c提供的一种可以直接通过字符串的名字key来访问类属性的机制)访问属性,会默认向数据模型的基类的传入下面两个kvcget/set方法:

-(id)valueforkey:(nsstring*)key;

-(void)setvalue:(nullableid)valueforkey:(nsstring*)key;。

根据本发明的实施例,在运行时置换为本方案图6a-图6b中提供的kvcget/set方法,可以根据接收的访问所述数据模型的第一属性的指令,来判断该指令中的第一属性的属性特征(例如第一属性的属性名称、属性类型、以及是否动态绑定等)。

通过如图6a~6b的置换方式,可以截获属性访问的指令中的第一属性的属性特征,并将访问数据流指向所期望的数据源。例如,当第一属性不存在属性特征或者不为动态绑定的属性时,就可以通过现有技术属性访问方式进行访问。若当第一属性的属性特征是动态绑定时,可以通过与该第一属性相关联的、动态绑定的数据源代理协议来访问包括该第一属性的至少一个数据源。

图6a~6b中提供的本方案的kvcget/set方法的置换时机可以选择在例如建立所述全部属性中的每一个属性与至少一个属性特征的关联关系时进行。另外,可以仅针对数据模型的基类进行置换,从而可以尽量避免对元类nsobject做置换,减少置换的影响范围。

数据源代理协议的get方法如图6a所示,其过程可以简述为传入关键字key,返回该数据源中key对应的value。

其中的数据模型部分示出的为数据源代理协议get方法的一种实现方式。

数据源代理协议set方法如图6b所示,其过程可以简述为传入key以及value,将value保持到数据源中key对应的位置。

其中的数据模型部分示出的为数据源代理set方法的一种实现方式。

如图6a和6b所示,其中的数据源代理1的访问策略是访问多种数据源,数据源代理2的访问策略是访问一种数据源。并且,在运行过程中,可以根据访问需求,将数据源代理切换为数据源代理协议1或者数据源代理协议2。

可以理解,图6a和6b所示仅为示例性描述,不应作为对本发明方案的限定。

根据本发明的实施例,只要能够接入该数据源代理协议的数据源,都可以接入模型基类,从而通过属性访问动态映射到数据源。

根据本发明的实施例,图5所示的属性访问方法中进行属性访问时所述数据模型可以连接多个数据源代理协议,并且可以通过数据源代理协议同时接入各种不同的数据源,同时如图6a和6b所示。

更进一步地,数据源代理协议也可以在调用方访问所述数据模型的过程中随着程序的运行动态置换,以实现数据策略的动态部署。以此方式,使得数据模型可以低成本的同时接入多个数据源,并可以按照具体的实际需要来制定相应的数据访问策略。

根据本发明另一实施例,当所述第一属性的属性特征包括运行动态绑定时,在不存在与所述第一属性动态绑定的至少一个数据源代理协议的情况下,操作s405可以通过图7所示的方法流程实现。

图7示意性地示出了根据本发明再一实施例的操作s405中对所述第一属性进行访问的方法流程图。

如图7所示,当所述第一属性的属性包括运行动态绑定时,在不存在与所述第一属性动态绑定的至少一个数据源代理协议的情况下,操作s405可以包括操作s4251和操作s4252。

在操作s4251,访问与所述第一属性动态绑定的至少一个关联对象代理协议,所述关联对象代理协议用于对所述数据模型中的类添加所述第一属性;

在操作s4252,通过所述关联对象代理协议访问所述第一属性。

根据本发明的实施例,在一些实施例中在操作s4251之前,还可以包括创建所述关联对象代理协议,以及将所述第一属性与所述关联对象代理协议动态绑定。

建立关联对象代理协议可以是例如创建一个元类nsobject关联对象代理协议。在objective-c中可以通过category给一个数据模型已有的类添加属性(如nsobject),但是却不能添加实例变量,然而可以运行时通过键值对访问的方式,用associatedobject间接地达到添加相应实例变量的目的。通过关联对象代理协议,可以给所述数据模型的类添加所述第一属性,从而可以通过该关联对象协议访问所述第一属性。

所述关联对象代理协议可以通过简单的一两行声明来实现,将所述数据模型原本没有的一些属性信息添加到所述数据模型。从而,可以扩充所述数据模型的属性访问能力,使得通过属性访问所述数据模型时,不仅可以访问所述数据模型中非动态绑定的已有的属性,还可以访问与通过所述关联对象代理协议动态绑定的属性。

图5和图7所示的对所述第一属性进行访问的两种方法可以在调用方访问的第一属性为动态绑定时进行,二者的区别在于,图5所示的方法应用于存在数据源代理协议的情形,图7所示的方法应用于虽然不存在数据源代理的情形,但是存在关联对象代理协议的情形。

根据本发明的实施例,该建立属性访问方法提供了一种通用、普适的属性访问映射策略。例如,当调用方访问的第一属性不存在属性特征、或者不为动态绑定的属性时(例如该第一属性是所述数据模型自有的属性),可以通过现有技术中已有的方式从该数据模型中访问该第一属性。或者,当第一属性存在属性特征,且为动态绑定的属性时,可以通过与该第一属性相关联的数据源代理协议从其他至少一个数据源处访问该第一属性。再或者,该第一属性属于动态绑定的属性但不存在与该第一属性相关联的数据源代理协议时,可以通过关联对象代理协议给该数据模型的类添加该第一属性,从而对该第一属性进行访问。以此方式,根据本发明的实施例的建立属性访问的方法,可以实现进行通用的、普适的属性访问。

图8a~8c示意性示出了根据本发明实施方式的建立属性访问方法的应用示例。

如图8a所示,当要读取第一属性的值时,根据本发明的实施例,可以创建一个键值对访问的get方法。例如创建对应“-(id)valueforkey:(nsstring*)key;”的置换方法,后简称置换get方法。

在操作s403,接收要读取第一属性的值的指令。根据该指令可以获得该指令所访问的第一属性的关键字key。

在操作s404,根据在操作s202中建立的所述关联关系,确定该第一属性的关键字key对应的属性特征。

在操作s405,根据该关键字key对应的属性特征的内容,读取所述第一属性的值。

具体地,a)如果不存在属性特征,或者不为动态绑定的属性。则利用现有技术中的系统的kvcget方法,针对特定的数据源自定义一个数据模型基类,实现对该特定的数据源的属性的访问。例如,使用默认的“-(id)valueforkey:(nsstring*)key;”系统kvcget方法进行访问。

b)如果存在属性特征,且为动态绑定的属性,即在代码中声明属性为@dynamic。

则检查是否存在图6a所示的方法的数据源代理协议的情形。如存在数据源代理协议,则通过数据源代理协议的get方法,按照图5所示的方法流程进行访问。

如不存在可用的数据源代理协议,则通过图7所示的方法,利用所述的关联对象代理协议get方法进行访问。

相应的,图8b示出了对第一属性赋值时的情形。

如图8b所示,根据本发明的实施例,可以创建一个键值对访问的set方法。例如创建对应“-(void)setvalue:(nullableid)valueforkey:(nsstring*)key;”的置换方法,后简称置换set方法。

在操作s403,接收要对第一属性赋值的指令。根据该指令可以获得所访问的第一属性的关键字key以及该关键字key对应的值。

在操作s404,根据在操作s202中建立的所述关联关系,确定第一属性的关键字key对应的属性特征。

在操作s405,根据该关键字key对应的属性特征,将该关键字key对应的值设置为所述第一属性的值。

具体地,a)如果不存在属性特征、或者不为动态绑定的属性。

则利用现有技术中的系统的kvcset方法,针对特定的数据源自定义一个数据模型基类,对该特定的数据源中的第一属性的值进行设置。例如,使用默认的“-(void)setvalue:(nullableid)valueforkey:(nsstring*)key;”系统kvcset方法进行访问。

b)如果存在属性特征,且为动态绑定的属性。

则检查是否存在图6b所示的方法的数据源代理协议的情形。如存在数据源代理协议,则通过数据源代理协议的set方法,按照图5所示的方法流程进行访问。

如过不存在可用的数据源代理协议,则通过图7所示的方法,利用所述的关联对象代理协议set方法进行访问。

如图8c所示,根据本发明实施例的建立属性的方法,通过分析所述数据模型中所有类型及其父类的所对应的属性所具有的属性特征,可以自定义地建立每一个属性与至少一个属性特征的关联关系。从而,可以通过该关联关系作为索引使该数据模型的全部对象均具有了相应的属性映射访问能力,可以进行高效地属性访问。

根据图8c所示,可以对数据模型的基类进行分析,确定该数据模型的基类是否置换过本方案参考图6a和6b的kvcget/set方法。如果已经置换过,说明该数据模型的基类能够有效地截获调用方的属性访问指令中的第一属性的属性特征,并将访问数据流指向我们所期望的数据源。

在置换过本方案的kvcget/set方法之后,分析数据模型的所有类是否建立属性与属性特征的关联关系,即是否执行过操作s201和操作s202。

若没有执行过,则执行操作s201和操作s202,建立属性与属性特征之间的关联关系,例如通过递归分析所述数据模型中所有类型及其父类的属性,直至数据模型的基类。或者,更进一步地没有绑定get方法的属性,则动态绑定默认的置换get方法,或者,没有绑定set方法的属性,则动态绑定默认的置换set方法。之后,就可以根据本发明实施例提供的方法,进行通用地、普适地动态访问。

若执行过操作s201和操作s202,则该数据模型已经具备了属性自定义映射的能力。就可以根据本发明实施例提供的方法,进行通用地、普适地动态访问。

例如,如果为动态绑定的属性,且get或set方法在编译时没有设定,则根据本发明的实施例,可以通过图8c示意的流程,对数据模型的基类绑定属性访问方法,从而使数据源可以通过图5或图7所示的方法进行访问。

根据本发明的实施例,对于声明动态绑定的属性,可不必编写关联对象的get/set方法,即可进行属性访问操作,特别适合通过类别方式,为已经存在的模型类增加属性,减少代码量,提升开发效率。

示例性介质

在介绍了本发明示例性实施方式的方法之后,接下来,参考图9对本发明示例性实施方式的、用于建立属性访问的程序产品900进行介绍。

图9示例性示出了根据本发明实施例的建立属性访问的程序产品900的示意图。

该程序产品900中存储有可执行指令。这些指令在被处理器执行时使得计算设备执行参考图2~图8c所描述的建立属性访问的方法。

例如,所述计算设备可以执行如图2中所示的操作s201:获取数据模型的类所包括的全部属性;以及操作s202:建立所述全部属性中的每一个属性与至少一个属性特征的关联关系。

所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。

如图9所示,描述了根据本发明的实施方式的用于建立属性访问的程序产品900,其可以采用便携式紧凑盘只读存储器(cd-rom)并包括程序代码,并可以在计算设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆,rf等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言——诸如java,c++等,还包括常规的过程式程序设计语言一—诸如“c”,语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—一连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。

示例性装置

在介绍了本发明示例性实施方式的介质之后,接下来,参考图10对本发明示例性实施方式的、用于建立属性访问的装置1000进行描述。

图10示意性示出了根据本发明实施例的建立属性访问的装置1000的框图。

该装置1000可以用于实现参考图2~图8c所描述的建立属性访问的方法。

如图10所示,该装置1000包括属性获取模块1010和属性特征关联模块1020。

属性获取模块1010用于获取数据模型的类所包括的全部属性。

属性特征关联模块1020用于建立所述全部属性中的每一个属性与至少一个属性特征的关联关系。

根据本发明的实施例,所述属性获取模块获取数据模型的类所包括的全部属性,包括通过递归遍历的方式,获取所述数据模型的所有类型及其父类所对应的属性。

更进一步地,所述递归遍历的递归截止点可以为所述数据模型的基类、或者所述数据模型的元类。

根据本发明的实施例,该装置1000还可以包括存储模块1030。存储模块1030用于存储所述关联关系。

根据本发明的实施例,该装置1000还可以包括访问指令接收模块1040、属性特征确定模块1050和访问模块1060。

访问指令接收模块1040用于接收访问所述数据模型的第一属性的指令,所述第一属性为所述全部属性中的任意一个属性。

属性特征确定模块1050用于根据所述关联关系,确定所述第一属性的属性特征。

访问模块1060用于根据所述第一属性的属性特征,对所述第一属性进行访问。

根据本发明的实施例,该装置1000还包括数据源代理协议确定模块1070。

数据源代理协议确定模块1070用于当所述第一属性的属性特征的内容为运行动态绑定时,确定是否存在与所述第一属性动态绑定的至少一个数据源代理协议,所述数据源代理协议用于将所述数据模型与包括所述第一属性的至少一个数据源相关联。

根据本发明的实施例,该访问模块1060可以包括数据源代理协议访问子模块和第一访问子模块。

此外,该访问模块1060还可以包括数据源代理建立子模块和数据源代理协议动态绑定子模块。

数据源代理访问子模块用于当所述第一属性的属性特征包括运行动态绑定时,在存在与所述第一属性动态绑定的至少一个数据源代理协议的情况下,访问与所述第一属性动态绑定的至少一个数据源代理协议。

第一访问子模块用于通过所述数据源代理协议从所述至少一个数据源中访问所述第一属性。

数据源代理协议建立子模块用于建立所述数据源代理协议;以及

数据源代理协议动态绑定子模块用于将所述第一属性与所述数据源代理协议动态绑定。

或者,根据本发明的另一实施例,该访问模块1060可以包括关联对象访问子模块和第二访问子模块。此外,该访问模块1060还可以包括关联对象代理创建子模块和关联对象代理动态绑定子模块。

关联对象访问子模块用于当所述第一属性的属性特征的内容为运行动态绑定时,在不存在与所述第一属性动态绑定的至少一个数据源代理协议的情况下,访问与所述第一属性动态绑定的至少一个关联对象代理协议,所述关联对象代理协议用于对所述数据模型的类添加所述第一属性。

第二访问子模块用于通过所述关联对象代理协议访问所述第一属性。

关联对象代理创建子模块,用于创建所述关联对象代理协议。

关联对象代理动态绑定子模块,用于将所述第一属性与所述关联对象代理协议动态绑定。

根据本发明的实施例,所述访问子模块访问所述第一属性,包括以键值对方式访问所述第一属性。

具体地,以键值对方式访问所述第一属性,包括以所述键值对方式读取所述第一属性的值、或者以所述键值对方式写入所述第一属性的值。

进一步地,以所述键值对方式读取所述第一属性的值包括根据所述指令确定关键字、通过该关键字查找所述第一属性、以及读取所述第一属性的值。

以及,以所述键值对方式写入所述第一属性的值,包括根据所述指令确定关键字和与该关键字对应的值、通过该关键字查找所述第一属性、以及将所述关键字对应的值写入所述第一属性。

示例性计算设备

在介绍了本发明示例性实施方式的方法、介质和装置之后,接下来,参考图11对本发明示例性实施方式的、用于建立属性访问的方法的计算设备1100进行描述性介绍。

本发明实施例还提供了一种计算设备。所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。

在一些可能的实施方式中,根据本发明的计算设备可以至少包括至少一个处理器、以及至少一个存储器。其中,所述存储器存储有程序代码,当所述程序代码被所述处理器执行时,使得所述处理器执行本说明书上述“示例性方法”部分中参考图2~图8c所描述的建立属性访问的方法。例如,所述处理器可以执行如图2中所示的操作s201获取数据模型中的类所包括的全部属性;以及操作s202建立所述全部属性中的每一个属性与至少一个属性特征的关联关系。

图11示意性示出了根据本发明实施例的计算设备1100的框图。

下面参照图11来描述根据本发明的这种实施方式的用于建立属性访问的计算设备1100。如图11所示的计算设备1100仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图11所示,计算设备1100以通用计算设备的形式表现。计算设备1100的组件可以包括但不限于:上述至少一个处理器1110、上述至少一个存储器1120、连接不同系统组件(包括存储器1120和处理器1110)的总线1130。

总线1130包括数据总线、地址总线和控制总线。

存储器1120可以包括易失性存储器,例如随机存取存储器(ram)1121和/或高速缓存存储器1122,还可以进一步包括只读存储器(rom)1123。

存储器1120还可以包括具有一组(至少一个)程序模块1124的程序/实用工具1125,这样的程序模块1124包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。

计算设备1100也可以与一个或多个外部设备1140(例如键盘、指向设备、蓝牙设备等)通信,这种通信可以通过输入/输出(i/0)接口1150进行。并且,计算设备1100还可以通过网络适配器1160与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器1160通过总线1130与计算设备1100的其它模块通信。应当明白,尽管图中未示出,可以结合计算设备1100使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。

应当注意,尽管在上文详细描述中提及了装置的若干单元/模块或子单元/子模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。

此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。

虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。

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