我问这个问题是为了获得对粘合代码主题的一些意见。
例如,假设您有一个类(伪代码):
class MyClass
int attribute a
string attribute b
为了表示该数据模型,您有一个滑块和一个文本框来表示,还有一个文本盒来表示。。。表示b.的窗口标签
显然,当其中一个视图对象发生更改时,您希望更新其他视图对象。但是,更新整个视图显然效率低下。
method onSomethingHappened(uiObject)
model.appropriateAttribute = uiObject.value
问题是,你对下一步该怎么做有什么看法?如果模型对象实现了一个回调,当值发生更改时,该回调会通知侦听器,从而允许编写如下粘合代码:
method modelChangedCallback(model, attribute)
uiObject1.value = model.a
uiObject2.value = model.a
您可以在哪里检查更改的属性,并做出相应的响应?在大多数情况下,这是Objective-C和Mac上的Cocoa中的模型。
或者,你宁愿让责任完全在于粘合代码吗?
method onSomethingHappened(uiObject)
model.appropriateAttribute = uiObject.value
self.updateForAttribute("appropriateAttribute")
当您的项目变得很大时,这两种方法都会变得非常棘手(粘合代码的问题也是如此)。也许还有其他方法。你觉得怎么样?
感谢您的意见!
对我来说,我认为这归结为需要行为的地方。在您描述的情况下,将多个控件绑定到一个属性是驱动需求的原因,因此向模型中添加代码来支持这一点是没有意义的。
在基于web的模型中,我可能会将逻辑放在网页中,因为使用Javascript可以以相当低的成本完成。如果我没有这种奢侈(即,我正在处理一个"愚蠢"的视图),那么在控制器或模型粘合代码中这样做可能是有意义的。如果这种事情变得足够常见,我可能会创建某种形式的通用帮助程序,以减少我必须处理的锅炉板代码的数量。