CN107480223B - 一种搜索方法、装置及存储介质 - Google Patents
一种搜索方法、装置及存储介质 Download PDFInfo
- Publication number
- CN107480223B CN107480223B CN201710653086.1A CN201710653086A CN107480223B CN 107480223 B CN107480223 B CN 107480223B CN 201710653086 A CN201710653086 A CN 201710653086A CN 107480223 B CN107480223 B CN 107480223B
- Authority
- CN
- China
- Prior art keywords
- view
- data
- page
- search
- model
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/957—Browsing optimisation, e.g. caching or content distillation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/951—Indexing; Web crawling techniques
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种搜索方法、装置及存储介质,所述方法包括:将搜索得到的原始数据通过第一转换装置转换为与触发搜索操作的业务相适配的数据模型;将转换得到的所述数据模型通过第二转换装置转换为视图对象,并将页面跳转至所述视图对象对应的搜索结果页面。本发明所述方案,实现了搜索页面的组件化,提高了搜索页面的复用性,减少了代码冗余。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种搜索方法、装置及存储介质。
背景技术
目前,很多APP(计算机应用程序)均可实现内部搜索,例如,58同城APP,具体的,58同城APP首页提供搜索功能,称为全站搜;58同城APP还有二手物品、房产、二手车、招聘、黄页等几大业务线,这是粗粒度的业务线,细分一下,二手可以拆分出二手物品、宠物等类别;房产拆分出租房、二手房等类别;招聘拆分出全职招聘、兼职等类别;黄页拆分出家政、本地服务等类别。拆分出的这些较细的类别的页面称之为大类页,这些大类页也提供搜索功能,称为大类搜。其中,大类页提供更细粒度的类别,如进入二手房大类页后会看到二手房、新房、商铺、厂房等入口,再次进入后是列表页,这些列表页也提供搜索功能,称为列表搜。
如图1所示,为目前APP实现内部搜索常用的搜索框架图。虽然看上去比较清晰,但是实际存在着很多问题,比如代码冗余、耦合度高、不易复用等。这些问题也是一些大型模块经过多次升级,到了后期经常存在的问题。接下来就具体问题进行具体分析。
随着业务的扩展,各APP的业务线也在逐渐成型和完善。每个业务线的大类页接入搜索功能也存在先后。业务线内部的列表页,更是多种多样,以58同城APP为例,业务线内部的列表页包括Native(原生)的类别页、Web列表页,还有特殊的列表页如简历库列表页、地图搜房页等等,这些列表页后来也都一一实现了搜索功能。不过也正是因为实现的时间有先后,逐渐积累产生了一些历史遗留问题。具体的:
(1)代码冗余问题:
不同的业务页面对搜索功能的支持有先后之别,后实现搜索的页面都是先拷贝一份先实现搜索页面的代码,然后把其中的业务代码删除,加入本业务页面的业务代码。这样,业务入口页面就各自实现了自己的一套搜索逻辑,如图2所示,这样会导致重复的代码超过10000行。
(2)耦合度高问题:
从图1可以看出,搜索页面是由业务入口页面管理和加载的。搜索页面要处理数据,包括热词和搜索历史的本地获取及服务器获取。搜索页面要处理网络请求,包括关键词的联想请求、关键词的搜索请求。进一步地,搜索页面还要实现视图的协议方法。这些大量的逻辑都是在业务页面文件中实现的。
在代码管理上,尽管已经把搜索相关的代码剥离出来,单独放到了一个Category类别文件中,但是实际上还是无法避免地跟业务页面逻辑耦合在一起。例如:
1、文件级别。业务页面文件中,既有业务方法,又有搜索相关的方法;
2、方法级别。在同一个方法中,既有业务逻辑,又有搜索逻辑。这是更为严重的耦合。
(3)搜索页面无法复用问题:
因为搜索页面与业务页面耦合度高,所以业务入口页面无法复用以前的搜索页面,只能各自实现。相反的,越来越多的业务入口页面不再考虑搜索页面的复用性,只考虑自己独自实现,导致搜索页面越来越多,比以前更加难以复用和移植。
另一个无法复用的原因来自于搜索页面自身的定制化严重。搜索页面需要清楚知道是否存在热词、搜索历史、联想结果等,然后来定制显示视图,如图3所示,是两个搜索页面的简化类图。搜索页面的列表协议方法均直接访问了搜索页面的属性,但是其属性是与搜索业务直接相关的。全站搜中没有城市业务,而城市选择页搜页面也没有热词等业务,这样的定制导致搜索页面无法复用。
(4)业务功能接入成本高问题:
业务功能接入成本高,表现在两个方面:
1、代码复用度低,开发成本高:业务页面想实现搜索页面成本高。在前已经介绍过了,搜索页面无法复用,业务页面需要自行实现一套搜索页面。
2、搜索页面与搜索结果页耦合性高:从搜索页面到搜索结果页之间的跳转只处理了固定页面的跳转。如果是列表页面接入搜索页面,只需要基于当前页面刷新即可。而全站搜和大类搜是最灵活的,根据搜索词可以跳转到所有业务线的落地页。但是JumpManager模块只处理了固定的页面跳转(如图1所示,只有搜索类别页、搜索结果列表页),假如业务线想搜索后跳转到一个自定义的页面,如搜索“拼车”,JumpManager模块是无法实现的。
这种只能跳转到固定的、有限的页面的跳转方式,限制了快速变化的业务需要。如果业务功能要接入一个新的跳转目标页面,需要发版才能实现,成本很高。
综上可知,随着版本的迭代、业务的复杂,现有的搜索框架也在不断受到挑战。诸如代码不能复用、耦合度高、业务功能接入成本高等问题日积月累,成为需要迫切解决的问题。
发明内容
鉴于上述问题,提出了本发明以便提供一种解决上述问题的搜索方法、装置及存储介质。
依据本发明的一个方面,提供一种搜索方法,应用于客户端,包括:
将搜索得到的原始数据通过第一转换装置转换为与触发搜索操作的业务相适配的数据模型;
将转换得到的所述数据模型通过第二转换装置转换为视图对象,并将页面跳转至所述视图对象对应的搜索结果页面。
可选地,本发明所述方法中,所述搜索得到的原始数据包括:来自服务器的数据和/或所述客户端本地的数据。
可选地,本发明所述方法中,所述将搜索得到的原始数据通过第一转换装置转换为与触发搜索操作的业务相适配的数据模型之前,还包括:
生成透明的可操作图层,并将所述可操作图层覆盖在业务页面的搜索框处;
检测到所述业务页面上的可操作图层被触发时,将页面跳转至可响应搜索操作的搜索页面。
可选地,本发明所述方法中,所述将页面跳转至执行搜索操作的搜索页面时,还包括:
在预先配置的组件池中获取与所述业务相匹配的搜索输入组件;所述搜索输入组件包括:搜索框组件和/或语音组件;
利用所述搜索输入组件,配置所述搜索页面的搜索输入视图。
可选地,本发明所述方法中,所述将搜索得到的原始数据通过第一转换装置转换为与触发搜索操作的业务相适配的数据模型,包括:
在组件池中的数据模型池中获取所述原始数据对应的解析方法,根据所述解析方法,将所述原始数据转换为与触发搜索操作的业务相适配的数据模型。可选地,本发明所述方法中,根据所述解析方法,将所述原始数据转换为与触发搜索操作的业务相适配的数据模型,包括:
利用所述第一转换装置遍历所述原始数据,获取数据中的key,其中,所述原始数据为[key:字典]形式的数组;
根据所述key,查找数据模型组件注册表,得到所述key对应数据模型的类名ClassName;
创建所述Class Name的实例对象模型,并将所述key对应的字典,传至所述实例对象模型,得到[key:实例对象模型]数组。
可选地,本发明所述方法中,所述将转换得到的所述数据模型通过第二转换装置转换为视图对象,包括:
根据所述[key:实例对象模型]数组中的key,查找视图模型组件注册表,得到所述key对应视图模型的Class Name;
根据所述视图模型的Class Name,生成视图对象,并将所述key对应的实例对象模型,配置到所述视图对象。
可选地,本发明所述方法中,所述将所述key对应的实例对象模型,配置到所述视图对象,包括:
在组件池中的视图模型池中获取所述key对应视图模型的视图方法,通过所述视图方法,将所述key对应的实例对象模型,配置到所述视图对象。
可选地,本发明所述方法中,在将所述key对应的实例对象模型,配置到所述视图对象之后,还包括:
检测查找到的所述视图模型的视图类型是否为列表视图,若是,则不对所述视图对象做处理;否则,将所述视图对象加载到列表视图单元中。
可选地,本发明所述方法中,利用路由中心进行页面的跳转。
可选地,本发明所述方法中,所述利用路由中心进行页面的跳转,包括:
将页面跳转数据发送到所述路由中心;
所述路由中心按照设定的跳转协议,解析所述页面跳转数据,得到业务页面类别参数pagetype、业务线参数tradeline、以及param字典;所述param字典中包含所述页面跳转数据中除了所述tradeline和pagetype以外的其他参数;
在路由注册表中查找所述tradeline和pagetype对应的视图控制器的ClassName;
利用所述视图控制器的Class Name,创建视图控制器对象;
将解析得到的param字典,传至所述视图控制器对象,并跳转至视图控制器对象对应的目标页面。
可选地,本发明所述方法中,所述路由中心按照设定的跳转协议,解析所述页面跳转数据之前,还包括:
判断所述页面跳转数据采用的数据协议是否与设定的所述跳转协议相同,若是,则直接进行页面跳转数据的解析操作;否则,利用设置的一个或多个业务线分发转换器将所述页面跳转数据按照所述跳转协议进行格式转换。
可选地,本发明所述方法中,所述路由注册表以[tradeline:字典]二维数组的方式进行数据存储;所述字典内存储有pagetype参数与视图控制器的Class Name的映射关系。
依据本发明的另一个方面,提供一种搜索装置,应用于客户端,包括:
数据模型转换模块,用于将搜索得到的原始数据通过第一转换装置转换为与触发搜索操作的业务相适配的数据模型;
视图模型转换模块,用于将转换得到的所述数据模型通过第二转换装置转换为视图对象;
页面跳转模块,用于将页面跳转至所述视图对象对应的搜索结果页面。
可选地,本发明所述装置中,所述搜索得到的原始数据包括:来自服务器的数据和/或所述客户端本地的数据。
可选地,本发明所述装置,还包括:搜索入口模块,用于生成透明的可操作图层,并将所述可操作图层覆盖在业务页面的搜索框处,当检测到所述业务页面上的可操作图层被触发时,将页面跳转至可响应搜索操作的搜索页面。
可选地,本发明所述装置中,所述搜索入口模块,还用于在将页面跳转至执行搜索操作的搜索页面时,在预先配置的组件池中获取与所述业务相匹配的搜索输入组件;利用所述搜索输入组件,配置所述搜索页面的搜索输入视图;其中,所述搜索输入组件包括:搜索框组件和/或语音组件。
可选地,本发明所述装置中,所述数据模型转换模块,具体用于在组件池中的数据模型池中获取所述原始数据对应的解析方法,根据所述解析方法,将所述原始数据转换为与触发搜索操作的业务相适配的数据模型。
可选地,本发明所述装置中,所述数据模型转换模块,具体用于:
利用所述第一转换装置遍历所述原始数据,获取数据中的key,其中,所述原始数据为[key:字典]形式的数组;
根据所述key,查找数据模型组件注册表,得到所述key对应数据模型的类名ClassName;
创建所述Class Name的实例对象模型,并将所述key对应的字典,传至所述实例对象模型,得到[key:实例对象模型]数组。
可选地,本发明所述装置中,所述视图模型转换模块,具体用于根据所述[key:实例对象模型]数组中的key,查找视图模型组件注册表,得到所述key对应视图模型的ClassName;根据所述视图模型的Class Name,生成视图对象,并将所述key对应的实例对象模型,配置到所述视图对象。
可选地,本发明所述装置中,所述视图模型转换模块,具体用于在组件池中的视图模型池中获取所述key对应视图模型的视图方法,通过所述视图方法,将所述key对应的实例对象模型,配置到所述视图对象。
可选地,本发明所述装置中,所述视图模型转换模块,还用于在将所述key对应的实例对象模型,配置到所述视图对象之后,检测查找到的所述视图模型的视图类型是否为列表视图,若是,则不对所述视图对象做处理;否则,将所述视图对象加载到列表视图单元中。
可选地,本发明所述装置,还包括:路由中心;
所述路由中心,用于完成所述页面跳转模块和/或所述搜索入口模块中页面的跳转。
可选地,本发明所述装置中,所述路由中心,具体用于:
接收所述页面跳转模块和/或所述搜索入口模块发送的页面跳转数据;
按照设定的跳转协议,解析所述页面跳转数据,得到业务页面类别参数pagetype、业务线参数tradeline、以及param字典;所述param字典中包含所述页面跳转数据中除了所述tradeline和pagetype以外的其他参数;
在路由注册表中查找所述tradeline和pagetype对应的视图控制器的ClassName;
利用所述视图控制器的Class Name,创建视图控制器对象;
将解析得到的param字典,传至所述视图控制器对象,并跳转至视图控制器对象对应的目标页面。
可选地,本发明所述装置中,所述路由中心按照设定的跳转协议,解析所述页面跳转数据之前,还用于:
判断所述页面跳转数据采用的数据协议是否与设定的所述跳转协议相同,若是,则直接进行页面跳转数据的解析操作;否则,利用设置的一个或多个业务线分发转换器将所述页面跳转数据按照所述跳转协议进行格式转换。
可选地,本发明所述装置中,所述路由注册表以[tradeline:字典]二维数组的方式进行数据存储;所述字典内存储有pagetype参数与视图控制器的Class Name的映射关系。
依据本发明的第三个方面,提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现如本发明所述的搜索方法的步骤。
本发明有益效果如下:
首先,本发明所述方案,实现了搜索页面的组件化,提高了搜索页面的复用性,减少了代码冗余;
其次,本发明所述方案,通过在业务页面的搜索框处叠加可操作图层,实现了将搜索页面从业务入口页面中解耦出来,降低了耦合度;
第三,本发明所述方案,通过路由中心进行页面跳转,让客户端内页面的跳转变得简单,降低了业务线接入成本。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为现有技术中的搜索框架图;
图2为现有技术中业务页面各自实现搜索页面的示意图;
图3为现有技术中两个搜索页面的简化类图;
图4为本发明中新版搜索框架图;
图5为本发明第一实施例提供的一种搜索方法的流程图;
图6为本发明第二实施例提供的一种搜索方法的流程图;
图7为本发明第三实施例提供的一种搜索方法的流程图;
图8为本发明中搜索入口解耦方式示意图;
图9为本发明中搜索页面通过组件化解耦示意图;
图10为本发明中全站搜的数据模型适配器的输入和输出示意图;
图11为本发明中原始数据示意图;
图12为本发明中数据模型注册表示意图;
图13为本发明中视图模型注册表示意图;
图14为本发明中组件生产全过程示意图;
图15为本发明中组件池示意图;
图16为本发明中路由中心设计目标示意图;
图17为本发明中路由中心的设计图:
图18为本发明中业务线分发转换器流程图;
图19为本发明中注册表文件内容示意图;
图20为本发明第五实施例提供的一种搜索装置的结构框图;
图21为本发明第五实施例提供的又一搜索装置的结构框图;
图22为本发明第五实施例提供的再一搜索装置的结构框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
为了解决现有的搜索框架存在的代码不能复用、耦合度高、业务功能接入成本高等问题,本发明实施例提供了一种搜索方法、装置及存储介质,所述方法、装置和存储介质应用在如图4所示的新的搜索框架下,新搜索框架整体来说是从三个层级实现了搜索模块的组件化。最外层,通过路由中心,业务入口可以跳转到搜索页面,搜索页面可以跳转到更多的结果页面;中间层,搜索页面内部可以配置搜索框组件和/或语音组件;最内层是列表视图内部的组件化实现,列表中的元素根据数据可以灵活、动态地展示任意组合的样式,消去了逻辑判断和业务依赖。下面就通过几个具体实施例,对本发明的具体实施过程进行详细说明。
本发明的实施例提供的一种搜索框架,可以通过第一转换装置和第二转换装置实现搜索模块的组件化。在本发明实施例中,第一转换装置可以是一种数据模型适配器,第二转换装置可以是一种视图模型适配器。其中,数据模型适配器可以执行将各类数据转换为与本发明实施例提供的搜索框架相适配的数据;视图模型适配器可以执行将适配数据转换为与上述搜索框架相适配的视图对象。下面就以第一转换装置是一种数据模型适配器、第二转换装置是一种视图模型适配器为例,对本发明的详细方案进行说明。
在本发明第一实施例中,提供一种搜索方法,应用在客户端中,如图5所示,所述搜索方法包括如下步骤:
步骤S501,将搜索得到的原始数据通过数据模型适配器转换为与触发搜索操作的业务相适配的数据模型;
本发明实施例中,首先,在组件池中的数据模型池中获取与原始数据对应的解析方法;其次,根据获取到的解析方法,将原始数据转换为与触发搜索操作的业务相适配的数据模型。
本发明实施例中,与原始数据对应的解析方法可以是用于对原始数据执行解析、筛选处理的预设规则。
在本发明的一个可选实施例中,所述原始数据为[key:字典]形式的数组;
本发明实施例中,搜索得到的原始数据包括但不限于为:来自服务器Server的数据和/或客户端本地的数据。
本发明实施例中,原始数据可以是根据输入的数据预先拼接的数组。
在本发明的一个具体实施例中,将搜索得到的原始数据通过数据模型适配器转换为与触发搜索操作的业务相适配的数据模型的实施方式,包括:
(1)利用数据模型适配器遍历所述原始数据,获取数据中的key;
(2)根据所述key,查找数据模型组件注册表,得到所述key对应数据模型的ClassName;其中,数据模型组件注册表中包含了key和数据模型Class Name间的映射关系。
(3)创建所述Class Name的实例对象模型,并将所述key对应的字典,传至所述实例对象模型,得到[key:实例对象模型]数组。
步骤S502,将转换得到的数据模型通过视图模型适配器转换为视图对象;
在本发明的一个具体实施例中,将转换得到的所述数据模型通过视图模型适配器转换为视图对象的实施方法,包括:
(1)根据步骤S501得到的[key:实例对象模型]数组中的key,查找视图模型组件注册表,得到所述key对应视图模型的Class Name;其中,视图模型组件注册表中包含了key和视图模型Class Name间的映射关系。
(2)根据所述视图模型的Class Name,生成视图对象,并将所述key对应的实例对象模型传至所述视图对象。
在本发明的一个可选实施例中,将所述key对应的实例对象模型,配置到所述视图对象,具体包括:
在组件池中的视图模型池中获取所述key对应视图模型的视图方法,通过所述视图方法,将所述key对应的实例对象模型,配置到所述视图对象。
进一步地,在本发明的一个可选实施例中,在将所述key对应的实例对象模型,配置到所述视图对象之后,还包括:
检测查找到的所述视图模型的视图类型是否为列表视图,若是,则不对所述视图对象做处理;否则,将所述视图对象加载到列表视图单元中。
步骤S503,将页面跳转至所述视图对象对应的搜索结果页面。
本发明实施例,不对页面跳转方式做唯一限定,任何可以实现页面跳转的方案均可应用于本发明所述实施例。
综上可知,本发明实施例所述方法,在搜索显示处理过程中,将数据和视图模型化(组件化),组件化过程不需要了解数据的细节,只需要拿到数据层传来的数据,然后转化成组件来显示即可,极大的提高了搜索页面的复用性,与现有技术相比,减少了代码冗余。
在本发明第二实施例中,提供一种搜索方法,应用在客户端中,如图6所示,所述搜索方法包括如下步骤:
步骤S601,在业务页面下,生成透明的可操作图层,并将所述可操作图层覆盖在业务页面的搜索框处;
步骤S602,检测到所述业务页面上的可操作图层被触发时,将页面跳转至可响应搜索操作的搜索页面;
具体的,本实施例中,用户可以在搜索页面内输入搜索词,进行搜索操作。
在本发明的一个可选实施例中,在将页面跳转至执行搜索操作的搜索页面时,还包括:
在预先配置的组件池中获取与所述业务相匹配的搜索输入组件;所述搜索输入组件包括:搜索框组件和/或语音组件;
利用所述搜索输入组件,配置所述搜索页面的搜索输入视图。
步骤S603,将搜索得到的原始数据通过数据模型适配器转换为与触发搜索操作的业务相适配的数据模型;
该步骤的具体实施例过程可参见第一实施例,在此不再赘述。
步骤S604,将转换得到的所述数据模型通过视图模型适配器转换为视图对象;
该步骤的具体实施例过程可参见第一实施例,在此不再赘述。
步骤S605,将页面跳转至所述视图对象对应的搜索结果页面。
本发明实施例所述方法,不仅通过搜索组件化提高了搜索页面的复用性、减少了代码冗余,而且利用在业务页面的搜索框处叠加可操作图层,使得搜索入口与业务解耦,避免了将搜索逻辑与业务逻辑耦合,导致的维护困难等问题。
在本发明的第三实施例中,提供一种搜索方法,应用在客户端中,本实施例所述方法包括第一实施例或者第二实施例的全部内容,与第一实施例或者第二实施例不同的是,本实施例将着重阐述通过路由中心进行页面跳转,从增加页面跳转灵活性的过程。
以第二实施例所述的方法步骤为例,本实施例所述方法的实施过程如图7所示,包括如下步骤:
步骤S701,在业务页面下,生成透明的可操作图层,并将所述可操作图层覆盖在业务页面的搜索框处;
步骤S702,检测到所述业务页面上的可操作图层被触发时,利用路由中心,将页面跳转至可响应搜索操作的搜索页面;
具体的,本实施例中,用户可以在搜索页面内输入搜索词,进行搜索操作。
步骤S703,将搜索得到的原始数据通过数据模型适配器转换为与触发搜索操作的业务相适配的数据模型;
步骤S704,将转换得到的所述数据模型通过视图模型适配器转换为视图对象;
步骤S705,利用路由中心,将页面跳转至所述视图对象对应的搜索结果页面。
下面将着重阐述利用路由中心进行页面跳转的实施过程。
具体的,本发明实施例中,利用路由中心进行页面的跳转,具体包括:
(1)将页面跳转数据发送到所述路由中心;
(2)路由中心按照设定的跳转协议,解析所述页面跳转数据,得到业务页面类别参数pagetype和业务线参数tradeline;
(3)路由中心在路由注册表中查找所述tradeline和pagetype对应的视图控制器的Class Name;
(4)路由中心利用所述视图控制器的Class Name,创建目标页面;
(5)路由中心将解析得到的所述页面跳转数据中除了所述tradeline和pagetype以外的其他参数,传至所述目标页面,并跳转至目标页面。
本实施例中,所述的路由注册表以[tradeline:字典]二维数组的方式进行数据存储;所述字典内存储有pagetype与视图控制器的Class Name的映射关系。此时,路由中心在路由注册表中查找所述tradeline和pagetype对应的视图控制器的Class Name,具体包括:
路由中心在路由注册表中查找tradeline对应的字典;
路由中心在查找到的字典中查找pagetype对应的视图控制器的Class Name。
在本发明的一个可选实施例中,路由中心按照设定的跳转协议,解析所述页面跳转数据之前,还包括:判断所述页面跳转数据采用的数据协议是否与设定的所述跳转协议相同,若是,则直接进行页面跳转数据的解析操作;否则,利用设置的一个或多个业务线分发转换器将所述页面跳转数据按照所述跳转协议进行格式转换。本实施例下的路由中心,支持多种数据协议的数据输入。
本发明实施例所述方法,利用路由中心让页面跳转变得更简单,降低了业务线接入成本。
在本发明第四实施例中,将根据附图4所述的搜索框架,结合具体的应用示例,对本发明实施例提供的搜索方法进行更详尽的阐述,需要指出的是,本实施例公开的大量技术细节用于解释本发明,并不用于唯一限定本发明。
本发明实施例将以iOS客户端为例进行说明,例如安卓等其他系统下的客户端同样适用。
本发明实施例通过对图4所示的搜索框架进行展开说明,来对本发明实施例所述的搜索方法进行阐述。
一,本实施例实现了搜索入口解耦,具体的:
现有技术中的搜索页面是在业务页面的视图控制器内加载的,搜索页面是一个UIView,是业务页面的一个子视图。业务页面除了处理自身业务逻辑,还需要实现搜索页面的大量逻辑,导致视图控制器动辄几千行,难以维护,代码可读性较差,视图控制器逻辑太多、过于复杂。
在图4所示的新框架中,对搜索入口进行了解耦,方法是使用假搜输入框作为搜索入口,更为具体的,本发明实施例,会生成透明的可操作图层,并将所述可操作图层覆盖在业务页面的搜索框处,具体如图8所示的视图层级,用户能看到搜索框,也可以点击搜索框,但是无法输入字符,因为搜索框上面覆盖了一层透明的UIButton按钮(即可操作图层)。当用户点击输入框时,其实是触发了UIButton的Target方法,然后通过路由中心跳转到搜索页面。
二,本实施例实现了搜索页面解耦,具体的:
现有技术中的搜索页面,数据和UI显示是耦合在一起的。UI页面直接访问数据属性,因为需要了解显示的是什么数据模型、数据模型的类Class。其他业务页面很难去复用这样的搜索页面。
本发明实施例中,如图4所示,将搜索页面划分为两层,上层是数据层,是真正与业务有关的子模块;下层是组件层,与业务无关,是可以复用的模块。
1、数据层。每个业务页面需要的搜索功能是不同的,区别在于UI展示的数据是不相同的。数据层处理与数据有关的搜索业务逻辑,如数据的获取、缓存、网络请求等等,除此之外还需要把数据组装到一个[key:字典]数组中。
2、组件层。搜索页面的组件化分为两层,外层是搜索框组件、语音组件的可配置化,内层是列表视图(UITableView)内部的组件化。组件层不需要了解数据的细节,只需要拿到数据层传来的数据,然后转化成组件来显示。
如图9所示,是58同城APP全站搜和城市选择页面的搜索页面,两个页面的数据层处理各自的搜索逻辑,但是公用组件层,当组件显示到列表中的时候,列表不需要知道Cell(元素)的具体类型,只便当做基类类型即可。
下面将着重阐述搜索页面组件化的过程:
搜索页面内部组件化分为两层,一层是搜索框组件、语音组件的可配置化,另一层是UITableView内部的组件化。
关于搜索框组件、语音组件可配置:
搜索页面中没有使用系统的导航栏,是为了更好的定制导航栏位置的搜索框视图。搜索页面把搜索框视图组装成一个组件,可以根据需求进行灵活配置。比如58同城APP,全站搜的搜索框增加了一个前置类别选择框,这是一个新的搜索框组件,只需要在全站搜的搜索页面替换搜索框组件即可,而不需要修改搜索页面的其他代码,影响最小。
语音组件也是可以配置的,如果某些业务页面的搜索页面不需要语音组件,则可以不显示该组件。
这两个组件的配置都是通过数据层根据业务来实现的。
关于UITableView内部的组件化,涉及到数据模型适配器、视图模型适配、注册表和组件生产,具体的:
(1)数据模型适配器
数据模型适配器的作用是把原始数据转换成与业务有关的数据模型。原始数据可能来自于Server,也可能是来自于客户端本地缓存。原始数据一般不外乎NSDictionary(字典)、NSArray(数组),为了更好地操作数据,需要转换成已有的数据模型。
在搜索页面实现组件化,数据就是由客户端来拼接的。比如在全站搜、大类搜中,就是把热词、搜索历史拼接为一个数组,然后交给数据模型适配器处理。数据模型适配器解析原始数据,然后输出数据模型数组。
如图10所示,是全站搜的数据模型适配器的输入和输出,输入的是热词和搜索历史数据,而经数据模型适配器转换之后,数据被转换为{key:model}字典组成的数组。保留key值,是为了使用key经过视图模型注册表得到对应cell的Class Name,而model对象则是用来为cell赋值的。下面详细解析说明。
传入的原始数据是一个数组,数组中的元素可能是数组,也可能是字典,如图11所示,左侧原始数组,都是字典形式,有10个字典,那么最后展现在UITableView中,section(分区)数目为1,row(行)数目为10;而右侧原始数组中又包含了两个数组,说明UITableView中会有2个section。其中第一个子数组只有1个元素,第二个子数组有4个元素,说明UITableView的两个section分别会有1个和4个row。
原始数组中,还有一个很重要的参数是字典的key值,比如右侧原始数组中有一个key:hotword,在数据模型组件注册表(如图12所示)中会存在对应这个key的一个数据model:WBSearchHotWordModel。
其中,数据模型组件注册表是一个字典,在解析原始数据中,通过key值可以找到对应的数据model的Class Name(类名),图12是数据模型组件注册表示意图。
数据模型组件注册表中的数据模型均存储在数据模型池中,数据模型池不是一个类、文件、模块,而是多个数据model的集合。数据模型池至少包含了数据模型注册表中所需要的数据模型。
数据模型除了声明一些业务需要的属性之外,还需要实现一个解析方法:
-(void)generateModelWithOriginalDict:(NSDictionary*)dict。
经过上述原理说明,数据模型适配器实现数据模型转换的过程如下:
步骤1、遍历原始数据数组,取出字典中的key值;
步骤2、通过数据模型组件注册表,找到key对应的数据模型Class Name;
步骤3、创建数据模型Class Name的实例对象model;
步骤4、利用数据模型的解析方法(generateModelWithOriginalDict:)实现将key对应的字典中的数据传入所述实例对象model。
步骤5、把{key:model}这个字段作为元素加入到新的结果数组中;
步骤6、遍历完成,返回新的结果数组。
(2)视图模型适配器
数据是为视图服务的,得到数据模型数组后,就可以在页面展示了。组件是在UITableView中展示,所以大部分情况视图都是UITableViewCell,如果视图工厂得到的视图不是UITableViewCell,而是UIView,则视图工厂会把UIView封装到UITableViewCell中。
视图模型适配器在进行视图模型转换过程中,需要用到视图模型组件注册表,视图模型组件注册表是一个字典,前面通过数据模型适配器已经得到了数据模型数组,数组中每个元素都是一个{key:model}字典。那么视图模型适配器通过key值可以在视图模型组件注册表中找到对应的视图模型的Class Name,图13是视图模型注册表示意图。
视图模型组件注册表中的视图模型均存储在视图模型池中,视图模型池不是一个类、文件、模块,而是多个视图的集合。视图模型池至少包含了视图模型组件注册表中所需要的视图模型。
视图模型除了声明一些业务需要的属性之外,还需要实现一个配置方法:
-(void)configSubViewsWithModel:(id)model。
对外暴露的方法只有一个,但是实现上会根据model的具体数据类型,进行不同的处理。
经过上述原理说明,可知视图模型适配器实现视图模型转换过程就是通过数据key值从视图模型组件注册表中查询视图模型Class Name,并利用Class Name生成视图对象的过程。
依次通过数据模型适配器、视图模型适配器处理的过程,也称之为组件的生产过程(也即得到视图的过程)。下面结合图14给出的具体示例,对该过程进行详细说明:
如图14所示,为组件生产全过程,包括:
步骤1、resultSearchList是数据模型适配器的输出结果,其中每个元素都是一个{key:model}字典;
步骤2、获取到indexPath.row位置的元素,解析得到key和model数据;
步骤3、通过key值,通过视图模型组件注册表得到视图模型的Class Name;
步骤4、根据Class Name,生成视图对象,并且利用视图模型的视图方法将至model数据配置到视图对象。
需要指出的是,假如视图是UITableViewCell类型,则直接返回视图对象(参见图14中的步骤5);假如视图只是UIView类型,则把view加载到UITableViewCell中,然后返回Cell实例(参见图14中的步骤6)。
如此,便生产出配置了数据的组件。
进一步地,本发明实施例中,图4所示的组件池,是按照功能划分的,在搜索框架中,组件池中的组件是所有搜索页面可能使用的组件。其中每一个组件不但包括数据模型、视图模型,还包括注册表和适配器中的处理。如图15所示,前面的介绍从按照模块划分的,而每一个框内都是一个组件,如热词组件。
进一步地,本发明实施例中,还可以增加组件池中的组件,具体的:
随着业务发展和需求的增加,不可避免会需要增加一些新的组件。原则是能复用尽量复用,不能复用也不必要把组件做的太耦合。
本实施例中,增加组件的过程为:
1、首先按照接口数据,创建一个新的数据model,包括属性和解析方法generateModelWithOriginalDict:;
2、在数据模型组件注册表中增加一个新的键值对,key值不要重复,value就是model的Class Name;
3、根据UI图开发新的视图模型,并且完成对数据的配置方法configSubViewsWithModel:;
4、在视图模型组件注册表中增加一个新的键值对,key值与2相同,value就是3中新建的视图模型的Class Name。
如此,便完成了组件的增加。之后可以根据数据的不同配置,让组件可以任意的排列组合。
三,本实施例通过路由中心实现了页面的跳转;
旧的搜索框架,搜索完成后的跳转是通过JumpManager实现的(如图1所示),而且只能跳转到有限的两种页面。虽然页面可以根据接口展现不同的内容,但是随着业务的发展,旧的搜索框架已经无法满足。
比如,随着iOS系统的升级,APP开始支持WKWebView,但是因为使用UIWebView页面的业务线还很多,所以需要长时间保持两者共存的方式。搜索关键词进入Web类型的结果页面时,如何控制APP进入的是WKWebView类型的页面还是UIWebView类型的页面?
最初可能通过判断参数来实现。Server返回的结果中有一个参数webType,当值为WKWebView时采用WKWebView类型,否则采用UIWebView类型。但是当随着业务的增长,将会充斥着大量if/else的代码,各种问题接踵而至。
最终采用更加灵活的方式,即通过路由中心来实现。路由中心不但解决了搜索框架中页面跳转的难题,其他业务需求在页面跳转时遇到的问题也得以解决。
本发明实施例中,路由中心的设计目标是:
1、使用简单。路由中心对使用方而言是一个黑盒子,使用方不需要关心如何实现;
2、支持多种应用场景。以上图16中的5种场景,路由中心都可以处理,而且可以跳转到右侧的四种页面中的任意一个页面;
3、稳定、不轻易变化。因为需要支持APP中所有页面的跳转,如果路由中心不稳定,将会造成很严重的后果;
4、扩展简单,易维护。业务发展很快,增加页面是常见的事,需要路由中心很容易实现对新页面的扩展。
针对上述设计目标,如图17所示,给出了本发明实施例所述路由中心的框架图,图中:
(一)路由入口:提供了两类路由入口方法,一类是针对新数据协议的Scheme Url路径类型的参数,另一类是针对旧数据协议的参数,如Server传送来的数据中还有很多在使用字典类型旧协议数据。
(二)协议数据转换层:不同的路由入口,传入的数据格式不一样,如果不进行统一,后面的处理将会有两套逻辑,出现多个if/else的分支代码,代码冗余、升级维护麻烦。根据当前的使用频率和未来的发展方向,本实施例最终选择是把旧协议数据转换成新协议数据。
新协议规则:
新旧协议中包含的字段是一样的,只是旧的跳转协议中,参数被放在了字典中,而新的跳转协议中,参数是在一个长字符串中。为了把旧的跳转协议转换成新协议数据,制定了新跳转协议规则格式:
wbscheme://router/tradeline/pagetype?otherparams=JsonString
需要指出的是,本领域技术人员,可以根据需要灵活的调整该规则格式。
其中:
【wbscheme】:是scheme,用于协议区分。外部调起时,用于区分是不是APP的交互协议;
【router】:authority,用于业务区分。用于区分是不是跳起协议;
【pagetype】:属于url的path,用于区分页面类别,如首页,列表页,详情页等等;
【tradeline】:属于url的path,用于区分业务线,如二手业务线,房产业务线,招聘业务线等等;
【otherparams=JsonString】:query参数,表示跳转时需要携带的参数;
还可以扩展其他字段,以解决跳转时页面关闭/是否登陆等问题。
制定了协议规则之后,就可以把旧协议数据与新协议字段相对应了。数据转换工作是由业务线分发转换器完成的。
业务线分发转换器:
前面已经介绍了新旧跳转协议的参数对应关系,现在需要一个转换器把旧协议数据转换成新跳转协议。但是因为各业务线、主APP主业务、其他创新业务等在跳转时,Server传入的参数可能不一样,需要的参数也可能不一样,所以需要多个转换器,根据业务线(trandline参数),制定了如图18所示的多个转换器。具体的,当协议格式转换层接收到路由入口的数据时,协议数据转换器判断数据是否采用了新跳转协议的格式,若是,则直接触发跳转管理;否则,将数据发送到业务线分发转换器。
每一个业务线分发转换器都是一个单例,并且都实现一个:
-(NSString*)dispatchActionData:(NSDictionary*)aJsonDic方法,作用是把字典类型的旧协议数据转换为字符串类型的新协议数据。
根据tradeline参数,就可以在转换器映射表中得到与该tradeline对应的业务线分发转换器的ClassName,然后通过业务线分发转换器调用dispatchAction:方法,即可完成新旧协议数据的转换。
(三)路由注册表
前面已经看到了跳转协议的数据格式,其中两个参数最重要:tradeline和pagetype,因为需要两个参数来定位一个视图控制器。
注册表文件:在同一个业务线的注册表中,key与视图控制器唯一对应。不同的业务线,key值可以重复。如图19所示,分别是黄页业务线和二手车业务线的注册表,其中key表示pagetype,value是视图控制器的Class Name。
注册表管理类:注册表文件需要在启动时由管理类执行注册,这个工作是由注册表管理类实现的。
首先,注册表管理类是一个单例。因为每次经由路由中心跳转的页面,都需要查询目标页面,所以把注册表管理类做成了单例。
其次,注册表数据是以二维字典的方式保存在管理类中的。通过tradeline参数可以得到一个字典,再次通过pagetype参数可以得到视图控制器(也即目标页面)的ClassName。
(四)跳转管理
解析跳转协议:前面已经统一了跳转协议,所以在这里只需要解析一种格式的数据即可。解析后可以得到tradeline参数、pagetype参数以及param字典(数据中的除了tradeline参数和pagetype参数以外的所有参数)。
目标页面管理:根据解析得到的tradeline和pagetype,通过查路由注册表的方式,可以定位一个唯一的视图控制器。所以在解析完跳转协议后,可以利用得到的视图控制器的Class Name通过运行时方法创建目标页面。最后把param参数传递给目标页面。
跳转控制:跳转控制可以通过Native(原生)代码或者Server来控制,如果未指定,则采用简单的Push方式跳转。路由中心支持以下六种方式:
1、简单的Push跳转到目标页面;
2、跳转到目标页面之前pop到上级页面;
3、跳转到目标页面之前PopToRootViewController;
4、通过Present的方式呈现目标页面;
5、跳转前先登录,登录成功之后才能跳转;
6、跳转过程中没有动画;
这6种方式的跳转都可以在跳转协议中增加参数来控制,实现了跳转方式的多样性和灵活性。
(五)视图控制器
视图控制器协议:在跳转管理部分通过Class Name创建对象后,为了更统一地创建视图控制器、给视图控制器对象赋值,声明了一个协议。协议只有一个方法,路由注册表中的所有视图控制器都需要实现这个方法。
视图控制器扩展:通过路由注册表可以通过tradeline参数和pagetype参数来定位一个唯一的视图控制器。也就是说所有的目标页面都有属于自己的tradeline参数、pagetype参数。无法给所有的目标页面增加这两个属性,也不能让所有的目标页面拥有同一个基类,更好的方式是增加一个UIViewController的扩展。
扩展中除了动态增加tradeline、pagetype两个属性外,还加入了跳转控制的中提及的一些参数作为属性,方便跳转控制。
在本发明第五实施例中,提供一种搜索装置,应用于客户端,如图20所示,所述装置包括:
数据模型转换模块2010,用于将搜索得到的原始数据通过数据模型适配器转换为与触发搜索操作的业务相适配的数据模型;
视图模型转换模块2020,用于将转换得到的所述数据模型通过视图模型适配器转换为视图对象;
页面跳转模块2030,用于将页面跳转至所述视图对象对应的搜索结果页面。
基于上述结构框架,下面给出在上述结构下的几个具体及优选实施方式,用以细化和优化本发明所述装置的功能,以使本发明方案的实施更方便,准确。具体涉及如下内容:
本发明实施例中,所述搜索得到的原始数据包括:来自服务器的数据和/或所述客户端本地的数据。
可选地,如图21所示,本发明实施例所述装置还包括:
搜索入口模块2040,用于生成透明的可操作图层,并将所述可操作图层覆盖在业务页面的搜索框处,当检测到所述业务页面上的可操作图层被触发时,将页面跳转至可响应搜索操作的搜索页面。
在本发明的一个具体实施例中,搜索入口模块2040,还用于在将页面跳转至执行搜索操作的搜索页面时,在预先配置的组件池中获取与所述业务相匹配的搜索输入组件;利用所述搜索输入组件,配置所述搜索页面的搜索输入视图;其中,所述搜索输入组件包括:搜索框组件和/或语音组件。
在本发明的一个具体实施例中,数据模型转换模块2010,具体用于:
在组件池中的数据模型池中获取所述原始数据对应的解析方法,根据所述解析方法,将所述原始数据转换为与触发搜索操作的业务相适配的数据模型。
其中,根据所述解析方法,将所述原始数据转换为与触发搜索操作的业务相适配的数据模型,包括:
利用所述数据模型适配器遍历所述原始数据,获取数据中的key;所述原始数据为[key:字典]形式的数组;
根据所述key,查找数据模型组件注册表,得到所述key对应数据模型的类名ClassName;
创建所述Class Name的实例对象模型,并将所述key对应的字典,传至所述实例对象模型,得到[key:实例对象模型]数组。
在本发明的一个具体实施例中,视图模型转换模块2020,具体用于根据所述[key:实例对象模型]数组中的key,查找视图模型组件注册表,得到所述key对应视图模型的Class Name;根据所述视图模型的Class Name,生成视图对象,并将所述key对应的实例对象模型,配置到所述视图对象。
可选地,本发明实施例中,视图模型转换模块2020,具体用于在组件池中的视图模型池中获取所述key对应视图模型的视图方法,通过所述视图方法,将所述key对应的实例对象模型,配置到所述视图对象。
可选地,本发明实施例中,视图模型转换模块2020,还用于在将所述key对应的实例对象模型,配置到所述视图对象之后,检测查找到的所述视图模型的视图类型是否为列表视图,若是,则不做处理;否则,将所述视图对象加载到列表视图单元中。
进一步地,如图22所示,本发明实施例所述装置,还包括:路由中心2050;
路由中心2050,用于完成所述页面跳转模块2010和/或所述搜索入口模块2040中页面的跳转。
在本发明的一个具体实施例中,路由中心2050,具体用于:
接收所述页面跳转模块和/或所述搜索入口模块发送的页面跳转数据;
按照设定的跳转协议,解析所述页面跳转数据,得到业务页面类别参数pagetype、业务线参数tradeline、以及param字典;所述param字典中包含所述页面跳转数据中除了所述tradeline和pagetype以外的其他参数;
在路由注册表中查找所述tradeline和pagetype对应的视图控制器的ClassName;
利用所述视图控制器的Class Name,创建视图控制器对象;
将解析得到的param字典,传至所述视图控制器对象,并跳转至视图控制器对象对应的目标页面。
可选地,本发明实施例中,路由中心2050按照设定的跳转协议,解析所述页面跳转数据之前,还用于:
判断所述页面跳转数据采用的数据协议是否与设定的所述跳转协议相同,若是,则直接进行页面跳转数据的解析操作;否则,利用设置的一个或多个业务线分发转换器将所述页面跳转数据按照所述跳转协议进行格式转换。
可选地,本发明实施例中,所述路由注册表以[tradeline:字典]二维数组的方式进行数据存储;所述字典内存储有pagetype参数与视图控制器的Class Name的映射关系。
综上可知,本发明实施例所述装置,实现了搜索页面的组件化,提高了搜索页面的复用性,减少了代码冗余;通过在业务页面的搜索框处叠加可操作图层,实现了将搜索页面从业务入口页面中解耦出来,降低了耦合度;通过路由中心进行页面跳转,让客户端内页面的跳转变得简单,降低了业务线接入成本。
在本发明第六实施例中,提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现如第一、第二或第三实施例所述搜索方法的步骤。
由于在第一、第二、第三实施例中已经对搜索方法的实施过程进行了详细说明,本实施例在此不再重复赘述。
本实施例所述计算机可读存储介质包括但不限于为:ROM、RAM、磁盘或光盘等。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是其与其他实施例的不同之处。尤其对于装置、存储介质实施例而言,由于其基本相似与方法实施例,所以,描述的比较简单,相关之处参见方法实施例的部分说明即可。
总之,以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (12)
1.一种搜索方法,应用于客户端,其特征在于,包括:
将搜索得到的原始数据通过第一转换装置转换为与触发搜索操作的业务相适配的数据模型;
将转换得到的所述数据模型通过第二转换装置转换为视图对象,并将页面跳转至所述视图对象对应的搜索结果页面;
其中,所述将搜索得到的原始数据通过第一转换装置转换为与触发搜索操作的业务相适配的数据模型,包括:
利用所述第一转换装置遍历所述原始数据,获取数据中的key,其中,所述原始数据为[key:字典]形式的数组;
根据所述key,查找数据模型组件注册表,得到所述key对应数据模型的类名ClassName;
创建所述Class Name的实例对象模型,并将所述key对应的字典,传至所述实例对象模型,得到[key:实例对象模型]数组;
所述将转换得到的所述数据模型通过第二转换装置转换为视图对象,包括:
根据所述[key:实例对象模型]数组中的key,查找视图模型组件注册表,得到所述key对应视图模型的Class Name;
根据所述视图模型的Class Name,生成视图对象,并将所述key对应的实例对象模型,配置到所述视图对象。
2.如权利要求1所述的方法,其特征在于,所述搜索得到的原始数据包括:来自服务器的数据和/或所述客户端本地的数据。
3.如权利要求1所述的方法,其特征在于,所述将搜索得到的原始数据通过第一转换装置转换为与触发搜索操作的业务相适配的数据模型之前,还包括:
生成透明的可操作图层,并将所述可操作图层覆盖在业务页面的搜索框处;
检测到所述业务页面上的可操作图层被触发时,将页面跳转至可响应搜索操作的搜索页面。
4.如权利要求3所述的方法,其特征在于,所述将页面跳转至执行搜索操作的搜索页面时,还包括:
在预先配置的组件池中获取与所述业务相匹配的搜索输入组件;所述搜索输入组件包括:搜索框组件和/或语音组件;
利用所述搜索输入组件,配置所述搜索页面的搜索输入视图。
5.如权利要求1所述的方法,其特征在于,所述将所述key对应的实例对象模型,配置到所述视图对象,包括:
在组件池中的视图模型池中获取所述key对应视图模型的视图方法,通过所述视图方法,将所述key对应的实例对象模型,配置到所述视图对象。
6.如权利要求1所述的方法,其特征在于,在将所述key对应的实例对象模型,配置到所述视图对象之后,还包括:
检测查找到的所述视图模型的视图类型是否为列表视图,若是,则不对所述视图对象做处理;否则,将所述视图对象加载到列表视图单元中。
7.如权利要求1或3所述的方法,其特征在于,利用路由中心进行页面的跳转。
8.如权利要求7所述的方法,其特征在于,所述利用路由中心进行页面的跳转,包括:
将页面跳转数据发送到所述路由中心;
所述路由中心按照设定的跳转协议,解析所述页面跳转数据,得到业务页面类别参数pagetype、业务线参数tradeline、以及param字典;所述param字典中包含所述页面跳转数据中除了所述tradeline和pagetype以外的其他参数;
在路由注册表中查找所述tradeline和pagetype对应的视图控制器的Class Name;
利用所述视图控制器的Class Name,创建视图控制器对象;
将解析得到的param字典,传至所述视图控制器对象,并跳转至视图控制器对象对应的目标页面。
9.如权利要求8所述的方法,其特征在于,所述路由中心按照设定的跳转协议,解析所述页面跳转数据之前,还包括:
判断所述页面跳转数据采用的数据协议是否与设定的所述跳转协议相同,若是,则直接进行页面跳转数据的解析操作;否则,利用设置的一个或多个业务线分发转换器将所述页面跳转数据按照所述跳转协议进行格式转换。
10.如权利要求8所述的方法,其特征在于,所述路由注册表以[tradeline:字典]二维数组的方式进行数据存储;所述字典内存储有pagetype与视图控制器的Class Name的映射关系。
11.一种搜索装置,应用于客户端,其特征在于,包括:
数据模型转换模块,用于将搜索得到的原始数据通过第一转换装置转换为与触发搜索操作的业务相适配的数据模型;
视图模型转换模块,用于将转换得到的所述数据模型通过第二转换装置转换为视图对象;
页面跳转模块,用于将页面跳转至所述视图对象对应的搜索结果页面;
其中,所述数据模型转换模块具体用于:
利用所述第一转换装置遍历所述原始数据,获取数据中的key,其中,所述原始数据为[key:字典]形式的数组;
根据所述key,查找数据模型组件注册表,得到所述key对应数据模型的类名ClassName;
创建所述Class Name的实例对象模型,并将所述key对应的字典,传至所述实例对象模型,得到[key:实例对象模型]数组;
所述视图模型转换模块具体用于:
根据所述[key:实例对象模型]数组中的key,查找视图模型组件注册表,得到所述key对应视图模型的Class Name;
根据所述视图模型的Class Name,生成视图对象,并将所述key对应的实例对象模型,配置到所述视图对象。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现如权利要求1至11中任一项所述的搜索方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710653086.1A CN107480223B (zh) | 2017-08-02 | 2017-08-02 | 一种搜索方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710653086.1A CN107480223B (zh) | 2017-08-02 | 2017-08-02 | 一种搜索方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107480223A CN107480223A (zh) | 2017-12-15 |
CN107480223B true CN107480223B (zh) | 2020-12-01 |
Family
ID=60596882
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710653086.1A Active CN107480223B (zh) | 2017-08-02 | 2017-08-02 | 一种搜索方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107480223B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108363601A (zh) * | 2018-01-17 | 2018-08-03 | 五八有限公司 | 应用程序的组件显示方法、装置及电子设备 |
CN112364280A (zh) * | 2020-10-27 | 2021-02-12 | 深圳开源互联网安全技术有限公司 | 分页查询动态适配方法及系统、设备及存储介质 |
CN116070896B (zh) * | 2023-04-07 | 2023-06-23 | 华能信息技术有限公司 | 一种基于业务中台的业务组件组合方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101216817A (zh) * | 2007-12-29 | 2008-07-09 | 中国建设银行股份有限公司 | 一种异构报表整合及集中管理的装置和系统 |
CN101694618A (zh) * | 2009-09-01 | 2010-04-14 | 卡斯柯信号有限公司 | 适用于ajax框架的模型层与视图层数据自动映射方法 |
CN103605806A (zh) * | 2013-12-09 | 2014-02-26 | 北京神舟航天软件技术有限公司 | 可配置的结构化数据组织方式的实现方法 |
CN105786930A (zh) * | 2014-12-26 | 2016-07-20 | 北京奇虎科技有限公司 | 基于触摸交互的搜索方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8533690B2 (en) * | 2010-05-20 | 2013-09-10 | James B. McAtamney | C-to-java programming language translator |
-
2017
- 2017-08-02 CN CN201710653086.1A patent/CN107480223B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101216817A (zh) * | 2007-12-29 | 2008-07-09 | 中国建设银行股份有限公司 | 一种异构报表整合及集中管理的装置和系统 |
CN101694618A (zh) * | 2009-09-01 | 2010-04-14 | 卡斯柯信号有限公司 | 适用于ajax框架的模型层与视图层数据自动映射方法 |
CN103605806A (zh) * | 2013-12-09 | 2014-02-26 | 北京神舟航天软件技术有限公司 | 可配置的结构化数据组织方式的实现方法 |
CN105786930A (zh) * | 2014-12-26 | 2016-07-20 | 北京奇虎科技有限公司 | 基于触摸交互的搜索方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107480223A (zh) | 2017-12-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108628661B (zh) | 云制造服务的自动建置方法、云制造系统 | |
EP3514694B1 (en) | Query translation | |
US8667456B1 (en) | Cloud-based indexing for integrated development environments | |
EP3709227B1 (en) | System and method for interoperable communication of an automation system component with multiple information sources | |
US8751558B2 (en) | Mashup infrastructure with learning mechanism | |
US20030020746A1 (en) | System and method for dynamically generating a web page | |
JP2006209743A (ja) | ドキュメントセントリックソフトウェアアプリケーションに対するタスク指向ユーザインターフェースモデル | |
CN107480223B (zh) | 一种搜索方法、装置及存储介质 | |
US20100332964A1 (en) | Electronic resource annotation | |
CN101493825A (zh) | 一种gis中间件配置管理方法 | |
US20170249323A1 (en) | Dynamic Information Retrieval and Publishing | |
KR101355273B1 (ko) | 컴퓨팅 시스템 및 그 실행 제어 방법과, 그 실행 제어 프로그램을 기록한 기록 매체 | |
CN102576426A (zh) | 状况监视系统 | |
US11943177B2 (en) | Virtual agent portal integration of two frameworks | |
KR101877828B1 (ko) | 인공지능 기반의 사용자 인터페이스 통합 플랫폼 시스템 | |
CN101288073B (zh) | 用于利用多种查询语言检索信息的系统、方法和软件 | |
JP2009140306A (ja) | 情報提供サーバおよび情報提供方法 | |
CN101655796A (zh) | 基于Web的可扩展帮助系统及其实现方法 | |
CN117453980A (zh) | 元数据管理、配置页面生成方法、服务器及存储介质 | |
JPH1127285A (ja) | ネットワーク管理システム及び記録媒体 | |
CN115827101B (zh) | 一种面向地球应用模型的云化集成系统及其方法 | |
CA3194059A1 (en) | Data extraction in industrial automation systems | |
JP2020091630A (ja) | ドキュメント作成支援システム | |
US20180046688A1 (en) | User Interface by way of Unknown Data Structure | |
Netti | Interactive guided online/off-line search using google api and json |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |