模型视图控制器:控制器或模型是否从服务器获取数据?

时间:2011-07-17 04:13:52

标签: objective-c ios model-view-controller

例如:假设我正在抓取名称列表并将其保存到NSMutableArray。我是否实现了实际调用服务器以获取控制器(UIViewController)或模型(Friends对象)中的数据的方法?

6 个答案:

答案 0 :(得分:8)

这是一个设计决定取决于你想要完成的事情。如果您的模型仅在单个服务的上下文中有意义,或者您希望模型提供对服务器上所有数据的访问,则将与服务器的连接构建到数据模型中。例如,如果您为Twitter或Flickr等服务构建客户端,这可能是有意义的。

另一方面,如果您只是从服务器抓取文件而这就是它的结束,那么在控制器中进行通信可能是有意义的。对于应用程序的特定行为,控制器往往不太可重用并且更加个性化。保持数据来自模型的具体细节使模型更具可重用性。它还使测试变得容易 - 您可以编写只读取本地文件的测试代码并将数据存储在模型中。

答案 1 :(得分:0)

这是一个很好的问题。我认为最好的方法是通过控制器,因为它将您的模型与要求其他模型分离,以使其正常工作。虽然我认为你不会在模型中违反“正确的mvc”。

答案 2 :(得分:0)

我想你想把它放在模型中。您要做的是询问数据的模型,然后模型将处理如何填充自己,无论是来自内部数据存储还是外部数据存储(如服务器)。

答案 3 :(得分:0)

一种方法是使用存储库模式。为此,您可以在Model文件夹中创建Repository对象,并将所有与数据库相关的方法放在其中。您的控制器调用存储库类来获取数据。这允许您将实际模型对象与数据库访问方法分开。

答案 4 :(得分:0)

我使用MVCS模式(模型 - 视图 - 控制器 - 存储),我在Aaron Hillegass的书“IOS Programming:The Big Nerd Ranch Guide”(http://www.bignerdranch.com/book/ios_programming_the_big_nerd_ranch_guide_rd_edition_)中发现了

该商店专门用于获取数据,无论是来自服务器,本地文件,持久化集合,数据库等。

它允许构建非常发展的应用程序。例如,您可以基于Web服务构建应用程序,并且在您希望保留数据的那一天,您必须修改存储,而无需修改控制器中的单行代码。

这很像存储库模式(http://msdn.microsoft.com/en-us/library/ff649690.aspx)(参见BobTurbo的回答)

答案 5 :(得分:0)

我个人会制作一个DAO或数据助手类。当事情变得更复杂时,很难在目标C中遵循严格的MVC。但是,将它放在模型或VC中也没有错。