2011-04-03 52 views
0

我有一个基于Flex的客户端应用程序,它通过BlazeDS与后端“交谈”。在我的一个使用案例中,将会有一个所谓的“照片墙”视图,该视图将呈现从用户和用户所在位置(类似于Facebook)提交的多个最新照片。从服务器获取高效数据的策略

问题是,这张照片墙中的数据必须按照“全部”进行过滤,这意味着没有过滤条件,“朋友”(意为用户所关注的朋友)和“位置” 。

以下三种方法嗡嗡我的头

如果我从服务器获取数据一次(当所有的过滤器默认情况下选中),我将存储在本地,并且下一次用户点击一个过滤器,这个本地集合将被本地过滤。问题是,我无法预测有多少最近的照片来自朋友,以及有多少位置,因此我最终可能会显示仅显示一张照片的页面,其中至少应显示5张照片。我显然不想处理部分抓取和类似的东西。

另一种方式是最初向服务器发出两个独立的请求,一个是从朋友处获取最近照片的集合,另一个是获取位置的最近照片的集合。因此,我会确保我有最少的照片供过滤的页面使用。当数据到达时,客户端将合并这两个集合,按日期排序,瞧那里是“ALL”集合(当然,重复的照片将不得不在修剪时合并)

第三,制作这个相同的东西在服务器级别,通过制作两个单独的查询然后合并它们。

这是一个常见的情况,我知道,但仍然,我必须以某种方式处理它。一般来说,请为数据提取建议良好的服务器不可知策略。

回答

0

在我看来,最好的方法是从数据驱动的设计角度考虑你的应用。你绝对应该有3个查询,以获得所有的照片,朋友的照片和位置照片与相应的分页。从客户端 - 服务器交互的角度来看,将相同的域对象与图像描述一起传递两次或三次并不昂贵。请记住AMF是紧凑的二进制格式。您可以依靠浏览器缓存来获取图像,甚至可以根据需要在客户端缓存位图数据。

从服务器的角度来看,您将拥有3个服务方法,3个查询到数据库。并且不需要使用两个其他查询将服务器上的所有图像组合在一起。从数据库获取所有记录将比使用附加条件的两个查询便宜得多,然后将它们结合到Java代码中。

最后它会让你的应用程序更加简单和可测试(在客户端和服务器端)。

最后,3个独立的查询和3个服务器端的服务方法来获取客户端列表。