数据绑定是否与MVC根本不兼容?

时间:2011-03-21 09:02:59

标签: model-view-controller design-patterns data-binding

Data binding在视图和模型之间建立直接耦合,从而绕过控制器。从根本上说,这打破了模型 - 视图控制器的架构模式,我是否正确地思考这个问题?这会使数据绑定成为“坏事”吗?

编辑:例如,angular声称是MVC框架,但其主要功能之一是数据绑定。

4 个答案:

答案 0 :(得分:5)

在我看来,Data Binding 可以是MVC模式的有效实现,因为在这种情况下数据绑定机制本身就是控制器。

例如在上面提到的角度中,$ watch函数似乎是一种快捷方式,可以以MVC风格的方式实现典型的Controller职责和功能。

所以在我看来,数据绑定是一个演化步骤,它实现了通过实现经典 MVC控制器所学到的最佳实践。

更新

但在原始模式意义上,我会将数据绑定描述为更像MVP或Passive View

但是我认为差异并不那么明显,因为它总是取决于你的UI技术。

答案 1 :(得分:5)

不一定,因为您不必将Model对象绑定到视图 我通常做的是创建只包含我想要显示的数据的简单DTO(或演示文稿对象),这就是视图层显示的内容。
在这种情况下,Controller保留其作为DTO上执行的操作和基础模型实体上的操作之间的转换器的功能。

答案 2 :(得分:0)

实际上,当您的数据被正确抽象时,将模型内容推送到UI的行为是一项重复性任务,通常会导致某种“帮助者”#34;。

让我们说将项目列表推送到组合框。这不一定是控制器的一部分,因为您可能希望共享此类功能。同时推动控件的价值(为了保持简单,让我们说文本框的文本)是重复和双向的。

在这里,你重复自己(想想DRY)并做同样的事情 再一次。

这正是数据绑定发挥作用的关键所在。这可以接管对于简单控件(复选框,文本框,组合框)无论如何都是相同的任务。对于网格控制等,它可能是特定的。

看看mvc & databinding: what's the best approach?。在这里,我将讨论将数据绑定与MVC结合使用时的最佳选择。

答案 3 :(得分:0)

数据绑定不会直接耦合视图和模型,因此它不是 Bad Thing ®。它是MVC架构的一个不可或缺的功能,GoF设计模式一书在第1章中对此进行了简要介绍。

  

MVC通过在视图和模型之间建立订阅/通知协议来分离它们。视图必须确保其外观反映模型的状态。每当模型的数据更改时,模型都会通知依赖于它的视图。作为响应,每个视图都有机会进行自我更新。这种方法使您可以将多个视图附加到模型以提供不同的演示文稿。您也可以为模型创建新视图,而无需重写它。

一个常见的误解是MVC是分层(3层)体系结构。它不是。模型直接更新视图。但是,这并不意味着两者是耦合的!发布/订阅设计使模型和视图保持分离。

  

这种更一般的设计由观察者设计模式描述。