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

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 中,直接从视图向模型或控制器请求一些数据的最佳方式是啥?

是否可以将模型数据从视图发送到不是该视图的控制器的控制器?

使用 rxSwift 中的 tableView 单元将数据从视图模型传递到视图控制器

我需要一次访问视图 2 或 3 或 n 中的模型数据

如何从多个控制器获取数据到 Laravel Blade 视图中?