【问题标题】:view as property of model object alternative视为模型对象替代的属性
【发布时间】:2013-05-13 04:34:25
【问题描述】:

我正在构建一个算术应用程序,其中有用于数字和数字的 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);
}

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

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

【问题讨论】:

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


    【解决方案1】:

    首先:你是对的。这不是好的设计。

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

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

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

    【讨论】:

    • 关于错误原因的好例子。视图可以访问它的子视图吗?
    • 你是对的,最好只根据它必须保留的内容来计算视图的大小,而不是从视图中获取数据
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2017-10-07
    • 1970-01-01
    相关资源
    最近更新 更多