2

我问这个问题是为了获得关于胶水代码主题的一些意见。

例如,假设您有一个类(伪代码):

class MyClass
    int attribute a
    string attribute b

为了表示该数据模型,您有一个滑块和一个文本框来表示 a,还有一个文本框并说...窗口标签来表示 b。

显然,当这些视图对象之一发生更改时,您希望更新其他视图对象。但是,更新整个视图显然是低效的。

method onSomethingHappened(uiObject)
    model.appropriateAttribute = uiObject.value

问题是,你对下一步做什么有什么看法?模型对象是否应该实现一个回调,在值发生更改时通知侦听器,允许编写如下粘合代码:

method modelChangedCallback(model, attribute)
    uiObject1.value = model.a
    uiObject2.value = model.a

您可以在哪里检查更改的属性是什么,并做出相应的响应?大多数情况下,这是 Mac 上 Objective-C 和 Cocoa 中的模型。

或者,您宁愿将责任完全放在胶水代码中吗?

method onSomethingHappened(uiObject)
    model.appropriateAttribute = uiObject.value
    self.updateForAttribute("appropriateAttribute")

当您的项目变大时,这两种方法都会变得非常麻烦(就像胶水代码的问题一样)。也许还有其他方法。你怎么看?

感谢您的任何意见!

4

1 回答 1

1

对我来说,我认为这归结为需要行为的地方。在您描述的情况下,您将多个控件绑定到一个属性的事实是驱动需求的原因,因此向模型添加代码以支持它是没有意义的。

在基于 Web 的模型中,我可能会将逻辑放在网页中,因为使用 Javascript 可以相当便宜地完成。如果我没有那种奢侈(即我正在处理一个“愚蠢”的视图),那么在控制器或模型粘合代码中执行它可能是有意义的。如果这种事情变得足够普遍,我可能会创建某种形式的通用帮助器来减少我必须处理的样板代码的数量。

于 2011-06-03T18:24:29.223 回答