Model view controller 编写粘合代码时的最佳实践

Model view controller 编写粘合代码时的最佳实践,model-view-controller,language-agnostic,model-glue,Model View Controller,Language Agnostic,Model Glue,我问这个问题是为了得到一些关于胶水代码的意见 例如,假设您有一个类(伪代码): 为了表示该数据模型,您有一个滑块和一个文本框来表示,还有一个文本框并说。。。表示b的窗口标签 显然,当其中一个视图对象发生更改时,您需要更新其他视图对象。但是,更新整个视图显然效率低下 method onSomethingHappened(uiObject) model.appropriateAttribute = uiObject.value 问题是,你对下一步做什么有什么看法?模型对象是否应该实现一个回

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

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

为了表示该数据模型,您有一个滑块和一个文本框来表示,还有一个文本框并说。。。表示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的模型中,我可能会将逻辑放在web页面中,因为使用Javascript可以非常便宜地完成。如果我没有这样的奢侈(即,我正在处理一个“愚蠢”的视图),那么在控制器或模型粘合代码中这样做可能是有意义的。如果这类事情变得足够普遍,我甚至可以创建某种形式的通用助手来减少我必须处理的锅炉板代码的数量

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