我已經爲請求創建了AFHTTPSessionManager
的子類別。我有一個模型類來解析我的傳入JSON。iOS獲取請求的最佳做法
我應該在哪裏執行獲取請求?在我的模型中,ViewController還是應該使用包裝器來處理請求?
哪些是這種情況下的最佳做法?
我已經爲請求創建了AFHTTPSessionManager
的子類別。我有一個模型類來解析我的傳入JSON。iOS獲取請求的最佳做法
我應該在哪裏執行獲取請求?在我的模型中,ViewController還是應該使用包裝器來處理請求?
哪些是這種情況下的最佳做法?
在開始我的項目之前,我有過同樣的問題。我這樣做了:
Base Class
使用AFNetworking完成所有取/放HTTP請求。 Web service class
對基類一無所知 - 只是如何使用它,我在這個意義上做了泛型的方法。 Data class
構建了我需要的url /參數。
通過這種方式,應用程序的其餘部分對網絡層一無所知。數據類知道如何將URL /參數放在一起並請求網絡呼叫。而已。 Web服務類知道如何根據提供給它的信息從數據類中進行該調用,並且基類知道如何提出請求並獲得響應。
然後,我將響應交給基礎XML/JSON類,該類開始分析從基礎Web服務類獲取的數據。一旦數據被解析後,它將被存儲到使用正確模型對象的數據類中。從那裏 - 應用程序只是要求數據類的數據。
使用這種方法,應用程序的頂層知道如何請求數據並將其恢復。它對這個過程的內部工作一無所知。這意味着,在未來,我應該決定更換一個不同的網絡庫,我只需要修改一個類而不是一堆代碼。
在堅果殼我構造這樣的:
Data class
Data Class
數據然後構造所需請求Webservice class
URL和參數從Data Class
獲取URL和參數並將其放入請求中,然後將其發送到基礎Web服務類Base webservice class
然後使用呼叫完整的網址。它處理響應,如果它成功,它將它放入一個NSData
對象中 - 然後將其交給XML/JSON類Data class
。一旦完成了原始調用的類通知完成了http請求和解析,它就會向數據提供`Data class'。
這種類別及其責任的分離,基於上述原因很有效。改變應用程序的一部分,不需要大量重寫許多類。在兩個,大部分。
我希望這能讓你走向正確的方向。
很好的解釋。我正在開發一個類似的項目,但只是使用NSURLConnection。我在兩個抽象層次上做了類似的事情。任何時候我需要添加新的功能,我的連接類永遠不會改變,我只需要調整我的新方法的協議和特定的功能。強烈推薦Tander的方法。 – Inertiatic
這就是整個想法。當你需要擴展時 - 你的網絡層保持不動。唯一需要改變的時機是改變庫或改用NSURLConnection。 :-) – Tander
非常感謝Tander,這正是我一直在尋找的。現在我理解了理論方面,但我認爲我需要的不僅僅是一個例子,而是將其付諸實踐。我發現你將網絡與應用程序分離的方式非常有趣,並且是保持ViewControllers和MVC輕量級的好方法。 – CarlosGz
嘿卡洛斯,這裏有很多人願意幫忙,但請確保你已經展示了你已經嘗試過的,沒有發揮作用的,以及你的問題的背景。還要確保你已經閱讀[**如何問](http://stackoverflow.com/questions/how-to-ask),然後編輯你的問題,以更好地吸引人們的時間和精力。就目前來看,給你一個有限的答案是很難的,答案可能完全是基於觀點的。 – brandonscript
我相信他的問題更多關於OOP原則,然後實際執行。 –
你真的在使用RestKit嗎?應用程序的總體概況和它使用的數據/同步是什麼? – Wain