2009-11-24 25 views
2

我正在開發一個應用程序,它會與暴露多種方法的Web服務進行通信。我試圖找出最佳模式是集中訪問Web服務,爲同步和異步訪問提供選項,並將數據返回給客戶端。有沒有人解決這個問題呢?爲所有方法iPhone設計模式 - > Web服務功能?

一類似乎將集中一切很好,但我想它會得到混亂的數據返回到正確的地方,尤其是與多個異步調用的時候。我的另一個想法是每種方法都有一個單獨的子類,有一些工廠代理訪問,但我認爲這可能是過度工程的情況。

(注意:不是問什麼方法調用使用/如何解析響應/等,尋找高水平的設計模式解決一般問題)

回答

1

我最近遇到了同樣的問題來了。雖然我不相信我的解決方案是最佳的,但它可能會幫助你。

我創建了一個Web服務管理器和一個端點協議。每個實現端點協議的對象都負責連接到Web服務端點(方法),解析返回的數據並通知其委託(通常是Web服務管理器)完成或發生任何錯誤。我最終創建了一個使用99%的時間的EndpointBase類。

的Web服務管理器負責根據需要實例化的端點和調用它們。所有的呼叫都是異步發生的。

總而言之,它似乎對我來說工作得很好。我確實得到了一個端點依賴於另一個端點響應的情況(我在那裏使用了命令模式)。你會想在看

SDK組件是:

  • NSURLConnection的
  • 的NSXMLParser
+0

我正朝着這種解決方案的方向前進,聽起來我並不是唯一一個想到這個問題的人。我唯一的區別在於,不是使用委託,而是使用KVO,因爲我可能同時擁有多個終端用戶。這也可以讓我在後面注入某種緩存邏輯,因爲一切都只是觀察同一個端點對象。 將在稍後以更新結束時更新。 – 2009-11-24 22:34:34

+0

委託主要通知Web服務管理器端點已完成,如果端點失敗,服務管理器將決定要執行的操作。 我使用KVO來更新大多數使用數據的視圖。 – jessecurry 2009-11-24 22:51:45

1

工廠?我們不需要任何臭味的工廠。

我這個做了幾次,我基本上你在說什麼:一個對象,可以爲所有Web服務調用方法,封裝與服務通信,處理連接問題,等等的細節在一個應用程序中,它是一個單身人士,因爲它需要保持會話狀態;在另一個應用程序中,它只是一個靜態方法的集合。

除了響應數據的一些格式,這是它的全部責任。

這是留給呼叫者的是呼叫是同步還是異步;類本身是同步編寫的,並且調用者只是在必要時在單獨的線程中使用它。可可的performSelector ...方法使這一切變得簡單。

1

如果REST是一個非常適合你的數據交互,那麼我會建議ObjectiveResource庫。它旨在與Ruby on Rails應用程序無縫協作,但它基本上使用Rails ActiveResource約定通過HTTP使用JSON或POX(普通舊XML)。

它基本上是一組關於NSObject的類別和一些原始對象類型,它們可讓您像[Dog findAllRemote]一樣調用返回Dog對象的列表,或者[myDog saveRemote]發送對myDog所做的更改對象返回到服務器。