我问了这个问题,以获得关于胶水代码主题的一些意见。
例如,假设您有一个类(伪代码):
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")
当您的项目变大时,这两种方法都会变得非常毛茸茸(就像胶水代码的问题一样)。也许还有其他方法。你觉得怎么样?
感谢您的任何意见!
答案 0 :(得分:1)
对我来说,我认为这取决于需要行为的地方。在您描述的情况下,您将多个控件绑定到属性的事实正在推动需求,因此将代码添加到模型以支持它是没有意义的。
在基于网络的模型中,我可能会将逻辑放在网页中,因为使用Javascript可以相当便宜地完成。如果我没有那种奢侈(即我正在处理“愚蠢”的观点),那么在控制器或模型胶水代码中进行它可能是有意义的。如果这种事情变得普遍,我可能会创建某种形式的通用帮助器,以减少我必须处理的样板代码量。