如何最好地在此MVC中构建模型

时间:2013-11-13 05:11:04

标签: ios iphone model-view-controller

这是一个MVC最佳实践问题。我会解释我的设计然后你们可以告诉我它听起来是否正确。

我有一个视图,显示类似于iBooks的PDF文本数据,名为TextView.h。它有一个UIScrollView,它使用分页来允许读者浏览页面。

我认为加载和分解文本到页面的所有逻辑都应该由模型类完成。 因此,对于最佳实践,我认为我创建了一个模型类并让它负责 1)打开pdf 2)有一个公共界面,视图控制器可以使用它来根据自己想要的页面查询文本数据

我有一个TextViewController.h,它是TextView.h的委托。 TextViewController将负责 1)加载文本视图 2)查询模型并使用结果填充视图。 e.g。

UILabel *label = [model getTextForPage:1];
[myView addPage:label];

3)为textViewController提供一个委托方法,该方法在用户每次在视图中翻页时触发。即视图控制器将监听视图的didEndDecelerating方法。发生这种情况时,viewController可以抓取新页面的文本并将其传递给视图,例如

  UILabel *label = [model getTextForPage:x];
    [myView addPage:label];

如果所有这些听起来都是正确的,请告诉我。谢谢!

2 个答案:

答案 0 :(得分:2)

首先,您的陈述:

  

我认为加载和分解文本到页面的所有逻辑都应该由模型类

完成

不正确,因为模型只保存值,所有对数据执行的处理都应该在MVC模式的控制器中完成。

例如,如果要添加两个数字,则必须保留模型中的值,在控制器中执行添加过程,并在视图中显示结果。

如果您需要将文本分解为页面,那么该逻辑应该在控制器中完成。

在iOS中,控制器和视图被组合到视图控制器中,因此无需创建另一个视图。在您的示例中,您可以创建视图并处理视图控制器中的逻辑,这很好,但是您无法像在getTextForPage中那样处理模型中的数据。相反,将此逻辑移动到视图控制器中的方法,而不是返回文本,然后将此文本加载到视图标签中。此方法可以从模型对象中获取所需的详细信息。

总之,模型保存数据,创建页面的过程在视图控制器中完成,结果将加载到您创建的视图中。

有关iOS中MVC的更多详细信息,请参阅以下链接,这些链接可以帮助您:

http://blog.teamtreehouse.com/ios-design-patterns-model-view-controller-part-3

https://developer.apple.com/library/ios/documentation/general/conceptual/CocoaEncyclopedia/Model-View-Controller/Model-View-Controller.html

答案 1 :(得分:1)

模型 - 只需拥有值。 查看 - 您可以在屏幕上看到的一切。 控制器 - 控制您希望View运行的方式

在你的情况下,

TextView.h是您的查看。涵盖所有显示和scrollView&寻呼

所有剩余的逻辑加载和分解文本到页面打开pdf 查询基于页面的文本数据加载文字视图位于TextViewController.h下,即控制器

您在这些页面中显示的数据是模型