模型视图控制器:控制器或模型是不是从服务器获取数据?
Posted
技术标签:
【中文标题】模型视图控制器:控制器或模型是不是从服务器获取数据?【英文标题】:Model View Controller: Does the Controller or Model fetch data off the server?模型视图控制器:控制器或模型是否从服务器获取数据? 【发布时间】:2011-10-07 00:06:31 【问题描述】:例如:假设我正在获取一个名称列表并将其保存到 NSMutableArray。我是实现实际调用服务端获取控制器(UIViewController)还是模型(Friends对象)中的数据的方法?
【问题讨论】:
【参考方案1】:这是一个设计决策,取决于您要完成的工作。如果您的模型仅在单个服务的上下文中有意义,或者如果您希望您的模型提供对服务器上所有数据的访问,则将与服务器的连接构建到您的数据模型中。例如,如果您正在为 Twitter 或 Flickr 等服务构建客户端,这可能是有意义的。
另一方面,如果您只是从服务器中获取文件并且到此为止,那么在控制器中进行通信可能是有意义的。控制器的可重用性往往较低,并且针对应用程序的特定行为进行了更多定制。保留有关数据来自模型的详细信息使模型更具可重用性。它还使测试变得容易——您可以编写只读取本地文件并将数据存储在模型中的测试代码。
【讨论】:
这就是我的意思,+1 这不应该是做出决定的唯一原因,但是在控制器中进行客户端-服务器通信还有一个优势,即您可能不需要从模型到模型实现notification 机制控制器。【参考方案2】:这是个好问题。我认为最好的方法是通过控制器,因为它将您的模型与要求另一个模型存在以使其正常工作分离。虽然我不认为你在模型中这样做违反了“正确的 mvc”。
【讨论】:
【参考方案3】:我认为您想将其放入模型中。您要做的是向模型询问数据,然后模型将处理如何填充自己,无论是来自内部数据存储还是外部数据存储(如服务器)。
【讨论】:
【参考方案4】:一种方法是使用存储库模式。为此,您在 Model 文件夹中创建 Repository 对象,并将所有与数据库相关的方法放入其中。您的控制器调用存储库类来获取数据。这允许您将真实模型对象与数据库访问方法分开。
【讨论】:
【参考方案5】:我使用 MVCS 模式(模型-视图-控制器-存储),这是我在 Aaron Hillegass 的《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)(参见 BobTurbo 的回答)
【讨论】:
【参考方案6】:我会亲自创建一个 DAO 或数据助手类。当事情变得更复杂时,很难在目标 C 中遵循严格的 MVC。不过放在模型或者VC里面也没有错。
【讨论】:
以上是关于模型视图控制器:控制器或模型是不是从服务器获取数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据从可解码模型传递或实现到 ViewController?
在 Laravel 中,直接从视图向模型或控制器请求一些数据的最佳方式是啥?