我有一个基于Flex的客户端应用程序,它通过BlazeDS与后端“对话”。在我的一个用例中,将有一个所谓的“照片墙”视图,它将呈现一些最近的照片,这些照片是由用户提交的,以及用户关注的位置(类似Facebook)。
问题是,照片墙中的数据必须按“全部”过滤,意思是没有过滤;“朋友”,意思是用户关注的朋友;“位置”,意思是用户关注的位置。
下面三种方法在我的脑海中嗡嗡作响
如果我只从服务器获取数据一次(默认情况下选择了ALL筛选器),我将在本地存储数据,下次用户单击筛选器时,此本地集合将在本地进行筛选。问题是,我无法预测最近的照片中有多少来自朋友,有多少来自不同的地点,因此我可能会得到一个只显示一张照片的页面,其中至少应该有5张照片。我显然不想处理部分抓取之类的事情。
另一种方式是最初向服务器发出两个单独的请求,一个是从朋友那里获取最近照片的集合,另一个是位置。因此,我将确保我有最少的照片来过滤页面。当数据到达时,客户端将合并这两个集合,按日期排序,这就是“全部”集合(当然,在合并时必须修剪重复的照片)
第三,通过创建两个独立的查询,然后将它们合并,在服务器级别进行相同的操作。
这是一种常见的情况,我知道,但我还是得想办法处理它。总而言之,请建议好的与服务器无关的数据获取策略。
发布于 2011-04-04 06:03:14
在我看来,最好的方法是从数据驱动设计的角度来考虑您的应用程序。你绝对应该有3个查询,以获得所有的照片,朋友的照片和位置的照片与相应的分页。从客户端-服务器交互的角度来看,传递具有图像描述的同一个域对象两次或三次并不是很昂贵。请记住,AMF是紧凑的二进制格式。您可以依靠浏览器缓存获取图像,如果需要,甚至可以在客户端缓存位图数据。
从服务器的角度来看,您将有3个服务方法和3个对DB的查询。并且不需要使用另外两个查询来组合服务器上的所有图像。从DB中获取所有记录要比两个带有附加条件的查询,然后在Java代码中组合它们要便宜得多。
最后,它将使您的应用程序更加简单和可测试(无论是在客户端还是在服务器端)。
最后,在服务器端使用3个独立的查询和3个服务方法来获取客户端的列表。
https://stackoverflow.com/questions/5531630
复制相似问题