2011-04-03 49 views
0

我有一個基於Flex的客戶端應用程序,它通過BlazeDS與後端「交談」。在我的一個使用案例中,將會有一個所謂的「照片牆」視圖,該視圖將呈現從用戶和用戶所在位置(類似於Facebook)提交的多個最新照片。從服務器獲取高效數據的策略

問題是,這張照片牆中的數據必須按照「全部」進行過濾,這意味着沒有過濾條件,「朋友」(意爲用戶所關注的朋友)和「位置」 。

以下三種方法嗡嗡我的頭

如果我從服務器獲取數據一次(當所有的過濾器默認情況下選中),我將存儲在本地,並且下一次用戶點擊一個過濾器,這個本地集合將被本地過濾。問題是,我無法預測有多少最近的照片來自朋友,以及有多少位置,因此我最終可能會顯示僅顯示一張照片的頁面,其中至少應顯示5張照片。我顯然不想處理部分抓取和類似的東西。

另一種方式是最初向服務器發出兩個獨立的請求,一個是從朋友處獲取最近照片的集合,另一個是獲取位置的最近照片的集合。因此,我會確保我有最少的照片供過濾的頁面使用。當數據到達時,客戶端將合併這兩個集合,按日期排序,瞧那裏是「ALL」集合(當然,重複的照片將不得不在修剪時合併)

第三,製作這個相同的東西在服務器級別,通過製作兩個單獨的查詢然後合併它們。

這是一個常見的情況,我知道,但仍然,我必須以某種方式處理它。一般來說,請爲數據提取建議良好的服務器不可知策略。

回答

0

在我看來,最好的方法是從數據驅動的設計角度考慮你的應用。你絕對應該有3個查詢,以獲得所有的照片,朋友的照片和位置照片與相應的分頁。從客戶端 - 服務器交互的角度來看,將相同的域對象與圖像描述一起傳遞兩次或三次並不昂貴。請記住AMF是緊湊的二進制格式。您可以依靠瀏覽器緩存來獲取圖像,甚至可以根據需要在客戶端緩存位圖數據。

從服務器的角度來看,您將擁有3個服務方法,3個查詢到數據庫。並且不需要使用兩個其他查詢將服務器上的所有圖像組合在一起。從數據庫獲取所有記錄將比使用附加條件的兩個查詢便宜得多,然後將它們結合到Java代碼中。

最後它會讓你的應用程序更加簡單和可測試(在客戶端和服務器端)。

最後,3個獨立的查詢和3個服務器端的服務方法來獲取客戶端列表。