编写胶水代码时的最佳做法

时间:2011-06-03 17:59:58

标签: model-view-controller language-agnostic model-glue

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

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

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")

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

感谢您的任何意见!

1 个答案:

答案 0 :(得分:1)

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

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