首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

“异构信息的聚合”小弟我的实现方法

2013-03-12 
“异构信息的聚合”我的实现方法有时候,我们需要将一些不同类型、结构的信息聚合在一起,提供给用户。?举例:QQ

“异构信息的聚合”我的实现方法
有时候,我们需要将一些不同类型、结构的信息聚合在一起,提供给用户。

?

举例:QQ空间中的好友动态,将日志、说说、签名档、相册相片等信息聚合在一起向用户展示。类似还有微博、轻博客等。谁叫我是一只菜鸟,因此不知道具体实现方案。如果您知道,请鄙视我吧,鄙视完后请告诉我方法,谢谢。

?

问题:项目中有一空间应用中需要类似好友动态功能。主题类型由两部分组成,一是日志、说说、相片相册,其二是创建、评论、回复,于是这两种主题类型的组合成的主题角色有:日志创建、日志评论、日志评论的回复、说说创建、说说评论、说说评论的回复、相册相片创建、相册相片评论、相册评论的回复。这些信息都可能需要按时间先后顺序聚合显示。

?

网络搜索问题解决方案一:通过log来实现。记录每一个用户的每一个功能点操作,写入log,展示时则显示相关好友的log,按时间先后排序。方案二:直接查询功能表(日志、相册等),再在程式中处理。总结分析:方案一,例如在日志创建、修改过程中,会将所有的信息均记录在log中,而用户其实感兴趣的是最终修改后的效果,另外,长长的log记录,最后还得通过水平分表等方案去解决单表记录过多、查询效率等问题。方案二未给出具体实施方案,如果程式中只作简单实现处理,未作特别设计,可维护性和扩展性差。

?

在作选择时,因希望提供实时信息,故将网络方案一排除。好吧,我承认这个借口有些勉强。总之是觉得它不爽就是了,故而有下文。

?

我的选择一:单独区分各功能点的好友动态。即:将日志、相册、评论、回复等动态区分开来,单独查询,没什么需要特殊说明的。在应用中实现了部分功能,但最终选择放弃,原因很简单,这实际上已经没有了所谓的信息聚合了。

?

我的选择二:采用网络方案二。并最终完成。当然是通过一些所谓特别的设计,否则就没下文了。

?

有了选择,但我可不想把一堆乱糟糟的查询和重新排序之类的代码堆积在一起。我需要的效果是:在查询时,像我的选择一中那样,各自查询,然后以统一的方式进行聚合,然后再将聚合的内容以各自的方式显示。

?

各自查询统一聚合,这让我想起了观察者模式,但又有点不同。观察者模式中,如果被观察者发生了什么状况,则轮询告知它的每个观察者。现在,有点不同的是,需要观察者收集每个观察者的情况,当然,可以在观察者的update方法中返回该信息,然后在被观察者中的notifyObservers方法中进行处理。但我发现,在spring这玩意儿中,一切似乎变得简单了。

?

具体方式:

每个需要进行聚合的主题解色在各自的ServiceImpl中各自进行的查询(当然通过Dao),这些ServiceImpl都实现同一个Service接口,然后将各自的ServiceImpl加入到同一个Action中的一个Service[]数组中,这个Action负责从Service[]中获取聚合的信息并对信息进行重新排序。总体思路就是这样。在信息聚合时,需要一个统一的VO(三个属性:Object?objectModel主题角色,String?actionName可理解为需要显示的模板或页面路径,Date?sortTime用于排序的时间,实质上是存在于objectModel中的其中一个属性),即在每个service中,对各自的主题角色进行封装,封装成VO列表,然后返回。

?在页面中,迭代显示VO,根据VO的actionName加载各自的模板或页面。

?

如果需要将一个新的主题角色加入到聚合列表,只需编写一个Service接口实现(在该实现中进行查询,然后将结果列表封装为VO列表,在spring配置文件中注入actionName的值),然后编写用于显示该主题角色的模板或页面,最后将Service的实现加入Action中的那个Service[]数组中。如下(InfoTalkDiscussServiceImpl即为该Service接口实现):

?

<bean name="infoTalkDiscussService" ref="talkDiscussDao"></property><property name="actionName"><value>showInfoTalkDiscuss.jsp</value></property></bean>

?

<bean name="infoAction" scope="prototype"><property name="infoModelServices">   <list>     <ref bean="infoTalkDiscussService"/>     <ref bean="infoTalkDisReplyService"/>     <ref bean="infoDailyDiscussService"/>     <ref bean="infoDailyDisReplyService"/>   </list></property></bean>

?

效果图如下:


“异构信息的聚合”小弟我的实现方法
?

?

?

?

热点排行