2011-07-17 92 views

回答

8

這是一個設計決定,取決於你想要完成什麼。如果您的模型僅在單個服務的上下文中有意義,或者您希望您的模型提供對服務器上所有數據的訪問權限,則將與服務器的連接構建到您的數據模型中。例如,如果您爲Twitter或Flickr等服務構建客戶端,這可能是有意義的。另一方面,如果你只是從服務器獲取一個文件,並且這是文件的結尾,那麼在控制器中進行通信可能是有意義的。控制器往往不太可重用,並且更適合應用程序的特定行爲。保持關於數據來自模型的具體細節使模型更加可重用。它也使測試變得容易 - 您可以編寫只讀取本地文件並將數據存儲在模型中的測試代碼。

+0

這就是我正在得到的,+1 – Nektarios

+0

這不應該是作出決定的唯一原因,但在控制器中進行客戶端 - 服務器通信還具有以下優點:您可能不需要實施[通知](https ://developer.apple.com/library/ios/documentation/general/conceptual/devpedia-cocoacore/MVC.html)從模型到控制器的機制。 – Drux

0

這是一個很好的問題。我認爲最好的方法是通過一個控制器,因爲它將您的模型與要求其他模型的模型分開,以使其正常工作。儘管我不認爲你在模型中違反了「適當的mvc」。

0

我想你想把它放在模型中。你要做的是詢問數據模型,然後模型將處理如何從內部數據存儲或外部數據存儲(如服務器)填充自身。

0

一種方法是使用存儲庫模式。爲此,您需要在Model文件夾中創建Repository對象,並將所有與數據庫相關的方法放入其中。您的控制器調用存儲庫類來獲取數據。這使您可以將真正的模型對象與數據庫訪問方法分開。

0

我使用MVCS模式(模型 - 視圖 - 控制器 - 商店),我在艾倫·希爾加斯的書發現「IOS程序設計:大書呆子牧場指南」(http://www.bignerdranch.com/book/ios_programming_the_big_nerd_ranch_guide_rd_edition_

這家店是專門設計來取數據,無論它來自服務器,本地文件,持久集合,數據庫等。

它允許構建非常演變的應用程序。例如,您可以基於Web服務構建您的應用程序,並且在您希望保留數據的那一天,您必須修改存儲,而無需修改控制器中的單行代碼。

這是一個很像存儲庫模式(http://msdn.microsoft.com/en-us/library/ff649690.aspx)(CF BobTurbo的答案)

0

我會親自做一個DAO,或數據輔助類。當事情變得更加複雜時,很難在目標C中遵循嚴格的MVC。但是,把它放在模型或VC中也沒有錯。