从服务器获取有效数据的策略

时间:2011-04-03 18:39:14

标签: flex blazeds

我有一个基于Flex的客户端应用程序,通过BlazeDS与后端“对话”。在我的一个用例中,将会出现一个所谓的“照片墙”视图,该视图将呈现一些最近的照片,这些照片是人们提交的,也是用户所关注的位置(类似于Facebook)。

问题是,此照片墙中的数据必须通过“全部”过滤,意味着没有过滤器,“朋友”,意思是用户关注的朋友,以及“位置”,意味着用户关注的位置。

以下三种方法嗡嗡作响

如果我只从服务器获取一次数据(默认情况下选择了ALL过滤器),我会将其存储在本地,下次用户点击过滤器时,本地过滤将在本地过滤。问题是,我无法预测所有近期照片中有多少是来自朋友,有多少来自地点,因此我最终可能会看到只显示一张照片的页面,其中至少应有5张照片。我显然不想处理部分提取和类似的东西。

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

第三,通过制作两个单独的查询然后合并它们,在服务器级别做同样的事情。

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

1 个答案:

答案 0 :(得分:0)

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

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

最后它将使您的应用程序更简单和可测试(在客户端和服务器端)。

最后,服务器端最终有3个独立查询和3个服务方法,以便客户端获取列表。