0

我正在构建一个算术应用程序,其中有NSObjectNumbers 和 Digits 的子类。它们都有相应的视图对象,它们接受一个数据源(数字或数字)和一个委托,即视图控制器。

我发现它有助于让视图和模型一起工作以将数字视图设置为其相应数字的属性。

例如,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);
}

代码工作得很好,但我觉得从模型中保存指向视图的指针并不是一个好习惯,即使模型本身没有使用它。

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

4

1 回答 1

1

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

第二:计算模型内数字视图的大小。但是数字视图本身应该知道它的大小。它通过它的数据源知道这个数字并且可以得到数字。因此,它具有计算其大小的所有信息。

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

解决方案:将所有与图形状态(绘图、大小……)相关的代码放入数字视图和数字视图中。在一半的路上,这将是额外的工作。但最后,当每一个代码都迁移到视图层时,就像在模型内部计算一样简单。

于 2013-05-13T05:04:30.250 回答