2016-04-09 29 views
0

我似乎無法圍繞一個好的設計,讓用戶創建一個對象,保存到數據庫和跟蹤,如果該對象是發佈到服務器或不。跟蹤對象是否發佈到服務器或不(像snapchat)

就像在snapchat中 - 在離線狀態下,您可以創建一個包含圖片和接收器的快照對象,按發送,它會顯示在快照列表(表格視圖)中,但如果設備處於離線狀態,請求超時或將失敗,它將顯示一個紅色的感嘆號,你可以選中單元格重試。

做類似設計的好方法是什麼?有任何想法嗎?

在此先感謝!

回答

0

我曾在類似的應用程序工作。這個想法是你如何構建你的數據庫。在這種情況下,與表中的所有其他屬性一起添加一個屬性,稱爲isSent,它是一個布爾值。默認情況下,這應該是false,並且只應在服務器上更新時設置爲true。

這將有助於找出哪些項目未同步到服務器,並僅發送那些isSent爲false的項目。

現在一旦項目在服務器上更新後,您的應用程序將如何得知?爲此,您的服務器應將每次請求的成功消息發送回已發送的請求。您的要求可以是一系列物品,也可以是單個要求取決於要求。

Azure同步表也以相同的方式工作。當你第一次創建一個項目時,它被存儲在離線數據庫中,並且isSent爲false,那麼當服務器發送成功時,將該請求發送到服務器,將isSent更新爲true。

讓我們看一個這樣的例子: 假設您在離線評論。每條評論將被視爲單獨的項目。所以當你連接到互聯網時,所有的請求都將被髮送,每個項目都將有其獨特的Id以區別於其他的。您的要求上傳到服務器將是:

[ 
    { 
     "unique_id" : 1, 
     "Comment" : "Hello" 
    }, 
    { 
     "unique-id" : 2, 
     "Comment" : "How r u" 
    } 
] 

現在,從服務器的響應應該是:

[ 
    { 
     "unique_id" : 1, 
     "Status" : "success" 
    }, 
    { 
     "unique_id" : 1, 
     "Status" : "failed" 
    } 
] 

解析您迴應並基於狀態相應地更新你的數據庫的isSent列。

+0

感謝您的回答阿倫。如果對象試圖發送自己,以及何時發生失敗,您將如何得到通知?還有誰負責發送該對象?我一直在閱讀命令模式,這是否適合這個問題? – Kleemann

+0

基本上你需要觀察互聯網連接或在啓動時檢查是否有任何未確認的數據。開發人員必須管理如何以及何時發送。它應該是模式的組合 - 通知,單身。用示例場景更新我的答案。 –

0

我會看看像Parse Server這樣的服務。如果您不知道它是什麼,那麼它就是一個開源服務器,您可以在Heroku或Amazon AWS等服務上安裝(放置)服務器。當您使用Parse SDK將數據保存到服務器時,您可以選擇創建一個塊來處理髮生錯誤或成功是否等於true的情況。您可以查看YouTube視頻,瞭解如何設置Parse Server,比如Heroku。從那裏開始,所有舊的「解析」視頻即使關閉(因此是開源項目)也幾乎保持不變。此外,您可以使用Reachability來檢測用戶是否在線或離線 - 再次,您可以找到有關如何執行此操作的YouTube視頻。

+0

謝謝你的回答丹!我並不是真的想在這裏找到簡單的方法。我正在尋找一個乾淨的設計方法來解決這個問題,最好是設計模式。 – Kleemann