在Objective C中应用MVC哲学

时间:2012-02-13 23:35:54

标签: objective-c model-view-controller

我正在开始一个小项目,在屏幕上显示具有随机半径,随机颜色和随机位置的圆圈。我想使用Objective C中的MVC范例来实现它。

我有一个 Circle 类,它包含以下实例变量:

  • CGFloat radius
  • CGPoint中心
  • UIColor radiusColor

这个类不包含方法,只保存数据。它被放在一个单独的文件中。 (Circle.m& Circle.h)

我有一个 myModel 类,它应该是我的MVC的模型。它包含在我的视图边界内随机生成中心的方法,其中从整个控制器的View中请求绑定尺寸。

每次生成随机属性(即中心,颜色和半径)时,都会在myModel类中创建Circle类的实例,并将其存储在NSMutableArray中。 生成完成后,此NSMutableArray将传递给控制器​​,控制器又将其传递给视图,从而显示圆圈。

我的问题是,如果我要正确实现MVC范例,应该:

  1. 模型( myModel )是否包含 Circle 的实例,或 Circle 的实例应由控制器保存?
  2. 我的模型由1个类组成,或者由几个类组成是合法的吗?
  3. 模型知道视图的边界大小,还是MVC哲学中违反的东西?
  4. 最后一个问题。如果我按照上面的说明进行了实现,是 myModel Circle 单独的模型还是两个类都构成一个模型?

    谢谢!

2 个答案:

答案 0 :(得分:2)

  

[应该]模型(myModel)保存Circle的实例,或者   Circle的实例应该由控制器持有?

模型应该保存数据。这是它的工作。想象一下,如果您想要将界面更改为您的程序会发生什么。您可能希望显示圆圈列表及其位置,而不是(或除此之外)在屏幕上绘制圆圈。您可能想要更改或替换视图控制器来执行此操作,但您无需更改存储圆的模型。同样,您可能希望更改生成圆圈的方式,但仍以您现在的方式显示它们。在这种情况下,您将更改模型,但视图控制器和视图可能保持不变。

  

[应该]我的模型是由1个类组成的,还是由几个类组成是合法的?

数据模型通常是对象的整个图形,通常是不同类型的对象。您可能有一个对象来管理其余对象(尽管您不必这样做)。例如,您的MyModel类包含一个存储Circle对象的数组。您可以添加Square对象,Group对象等。

  

[应该]模型知道视图的边界大小或是那个   什么是违反MVC哲学的东西?

模型不应该具体了解视图,但视图控制器告诉它在给定的坐标范围内产生圆形是很好的。这样,如果视图更改大小或方向,视图控制器可能会知道它,并且它可以反过来为模型提供新信息。

答案 1 :(得分:1)

  1. 如果您的模型中有其他组件而不仅仅是圆圈,请将所有内容包装在myModel中。即使你不这样做,你可能仍然希望这样做以便将来添加。
  2. 取决于您的设计。如果您正在编写“基于文档”的应用程序(无论您是否使用UIDocument),通常会有一个包含其他类的类。即使你不是这样,拥有一个用于存档目的的根类等通常也很方便。
  3. 模型绝对不应该了解视图层次结构。 (请注意,这与了解“画布大小”之类的内容不同 - 在模型中存储此类属性是合法的,并让视图显示它所希望的画布,例如在UIScrollView中。)
  4. 顺便说一下,提前考虑这个问题的荣誉!