视图作为模型对象替代的属性

时间:2013-05-13 04:34:26

标签: ios objective-c model-view-controller cocoa-design-patterns

我正在构建一个算术应用程序&在其中有数字和数字NSObject的子类。其中有两个对应的视图对象,它们采用数据源(数字或数字)和委托,视图控制器。

我发现它在获取视图和视图方面非常有用。模型一起工作以将数字视图设置为其相应数字的属性。

例如,Number类有一个NSMutableArray属性,用于保存其数字。

如果我想找到相应NumberView的大小,我写的可以在控制器中编写这样的代码:

-(void) updateNumberViewFrameSize:(ACNumberView*) sender
{
    NSUInteger i;
    float width = 0, height = 0;
    for (ACDigit* digit in [sender.dataSource returnNumberViewDataSource].digitArray)
    {
        width += digit.digitView.size.width;
        height += digit.digitView.size.width;
    }
    sender.frame = CGRectMake(sender.frame.origin.x, sender.frame.origin.y, width, height);
}

代码工作正常,但我觉得将指针指向模型的视图并不好,即使模型本身没有使用它。

如果这是不好的做法,有哪些潜在的陷阱,是否有更好的方法来实现这种类型的结束?

1 个答案:

答案 0 :(得分:1)

第一:你是对的。这不是一个好的设计。

第二:计算模型内部数字视图的大小。但是一些观点应该知道它的大小本身。它通过数据源知道数字,并可以获取数字。所以它有计算其大小的所有信息。

要显示问题,想象一下(即使这种情况在iOS上并不常见),您在两个地方显示相同的数字(=与不同的数字视图)。这会破坏您的模型。为什么呢?

解决方案:将与图形状态(图形,尺寸,...)相关的所有代码放入数字视图和数字视图中。一半的方式将是额外的工作。但最后,当每个代码都迁移到视图层时,就像在模型中计算它一样简单。