【问题标题】:Can i use MVC in my app? [closed]我可以在我的应用程序中使用 MVC 吗? [关闭]
【发布时间】:2014-05-22 22:31:48
【问题描述】:

我制作了一个应用程序,但我想重构它以遵循已知的设计模式 (MVC)。有人可以解释一下什么代码应该在什么类中

所以现在我有这些课程:

ViewController
-- properties
name
age
-- methods

DetailViewController
-- properties
detail array
-- methods

FavoritesViewController (tableview)
-- properties
favorites array
-- methods

AllNamesViewController (tableview)
-- properties
name
age
-- methods

该应用的工作原理如下:

用户打开应用 -他可以单击问号并以 json 格式获取名称和其他属性。这将打开 DetailViewController 并将名称和年龄推送到 DetailViewController 的详细信息数组中。

收藏夹 -他可以返回开始屏幕并向左滑动以查看FavoritesViewController 并查看他保存的名称...当他单击它时,它会返回DetailsViewController 并将收藏夹数组推送到详细信息数组中。

全名 - 他可以向右滑动所有名称,当他单击一个时,它会转到 DetailViewController 并将数组元素推入 DetailViewController 的数组中。

什么样的对象应该是数据模型?以及该数据模型的外观如何?

json 方法的部分应该始终在控制器中还是在数据模型中?

我如何确定应该是什么数据模型。 我阅读了很多书籍并遵循了教程,但我从来没有看到什么时候应该在数据模型中。

所以有人可以用我制作的应用程序澄清它,以便我得到那个“OOOHH”的想法:)

【问题讨论】:

  • michaels 完全理解我的问题。我正在重构代码。我想知道什么应该是模型,什么应该在控制器中。我不知道的是,您还应该为处理获取“Person”对象的方法创建不同的类。

标签: ios oop model-view-controller


【解决方案1】:

根据 MVC 模式,您拥有三个独立的组件:模型、视图、控制器。

在 iOS 中,viewController 在 MVC 模式中扮演控制器的角色 - 它旨在处理视图和数据之间的通信。

viewController 的view 属性在MVC 模式中扮演View 的角色——这是要显示的UI。

如何实现模型部分取决于您,但根据我对您的问题的理解,您似乎有两个职责 - 一个保存您的信息的数据对象,以及存储该数据(以 JSON 格式)。

我会为此创建两个类,一个只是一个数据对象(称为Person 或其他东西,不确定您的用例是什么),它具有您需要存储的任何数据的属性,并且很少(如果任何)实际方法。第二种是某种存储类,您可以在其中传入要存储的 Persons,然后查询它们(即getAll、getFavorites 等)。此类将处理与 JSON 的转换,其接口将专门处理 Person 对象。

然后你的控制器会查询这个存储类,检索一个 Person 数组,并以某种方式显示它们(在一个看起来像的表中)。

【讨论】:

  • 感谢您的回答。所以我应该用所有连接到 web 服务的方法创建一个类,并获取我放入 Person 中的信息。其他视图控制器应该使用这些方法来获取 Person 吗?并将该 Person 对象用于视图?你是这个意思吗……?
  • 我假设您将信息存储在本地,但如果它是返回数据的 Web 服务,那么概念是相同的。是的,您将拥有一个从服务器检索数据并以强类型方式(即 Persons 数组)返回数据的类。然后控制器将使用该数据来更新其视图
  • 第一个视图控制器从 web 服务获取它的 Person...但是包含所有人员的 tableview 是一个 plist,它被下载到手机上并放入一个数组中。但它们都有相同的数据输出。所以基本上我会有 2 种方法……一个从 web 服务加载,一个从数组加载……但都在同一个“方法”类中,该类创建一个 Person 对象并将其推送到视图控制器和那些视图控制器“理解” Person 对象并使用它输出到视图...这是 MVC 吗?
  • 是的,这听起来很对。视图控制器只是获取模型对象并将它们传递(即从您的服务器类中检索它们,并将它们传递给视图),然后在模型需要更新时对视图上的事件做出反应(例如,用户改变一个人的名字,控制器将消息传递给一个可以保持这个改变的类)
  • 你说得很清楚谢谢!我不知道把方法放在哪里。我认为将它们放入 Person (模型类)会很奇怪,但是可以制作其他方法类..我没有明白...所以模型类本身没有分配方法。在示例中,它们始终只有比例。
猜你喜欢
  • 2012-12-07
  • 1970-01-01
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多