2010-03-03 208 views
0

考慮到良好的設計,每個視圖控制器是否更好地管理自己的連接/網絡/加載,或將其集中到應用程序委託或單獨的對象中?iPhone應用程序體系結構

上下文:

我有一個多標籤的應用程序,每一個導航控制器,以及一些下面視圖控制器。每個視圖控制器都在進行網絡加載XML和圖像。目前,我已設置它調用應用程序委託來異步獲取xml,處理它,然後調用返回頂部視圖控制器以顯示信息,然後啓動將圖像加載到數組中的單獨過程,以及發送每個加載時的回調。

從架構的角度來看,在每個視圖控制器中擁有更多的網絡代碼還是回調應用程序委託最好?

想法/意見?

TIA。

回答

0

我認爲,在每個視圖控制器中都會有更多的意義。現在設置的方式聽起來有點奇怪 - 您必須使用委派才能讓App Delegate與每個視圖控制器通信,或者您的應用程序委託中有大量對視圖控制器的引用,可能不需要。我想你的應用程序委託是混亂的,我很好奇你如何處理事情,如用戶決定停止查看特定視圖,然後與該視圖相關的XML已發回給您的應用程序,解析。

如果您擔心在視圖控制器中存在代碼重複,則可以通過使用類別來緩解該問題。

最後,雖然我認爲這可能是最好的域對象來處理,而不是視圖控制器。例如,在viewWillAppear中,您獲取或創建一個域對象的實例,並啓動將視圖控制器作爲委託的getData方法。所有的請求/解析都在你的域對象中完成,當它完成時,它會向你的視圖控制器發送一個getDataDidFinish消息或類似的東西。

+0

我一直在做的是將大部分網絡調用放在應用程序委託中,並且當xml解析器返回時,它會檢查哪個視圖是頂部視圖控制器,然後調用它的重載表。但是這種方法的問題是應用程序委託中存在太多的代碼。 我選擇將所有網絡重構爲一個新的單例。它簡化了應用程序委託,但沒有我想要的那麼多。 – user279778 2010-03-05 22:17:03

0

當我有這樣的情況時,我傾向於創建一個對象來處理所有網絡對象。這樣,我最終能夠寫出這樣的代碼:

[netObj getXML:somePlace]; 

主要的原因,我喜歡這種方法,是因爲它讓我的代碼庫整潔,最大限度地減少重複代碼。