模型可以观察视图吗?

时间:2010-01-20 00:47:47

标签: java model-view-controller design-patterns oop

我正在使用Java开发一个应用程序,在我的GUI中我有几个JPanels,其上有很多设置,这就是查看。这几个JPanels的背景中只有一个模型。通常情况下,我会从JPanels 观察 模型

我只是想知道,从模型中观察查看是不错的做法?因为,用户更改了查看,此更改必须影响我的模型。或者我在这里错过了一些重要的原则?谢谢你的帮助......

3 个答案:

答案 0 :(得分:6)

我认为你很好地质疑这一点。

你可能缺少哪一部分可以帮助控制器。

查看http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller以获取示例。

控制器基本上是模型和视图之间的中介。它“控制”应用程序。您的视图应该知道的唯一内容是传递给它的数据以及如何显示它。您的模型应该知道的唯一事情是数据。 Controller将这两者联系在一起,并包含作用于数据的业务逻辑,并准备将其传递给视图。

使用此设计可获得的是loosley耦合且易于测试的应用程序。它真的很优雅恕我直言。

干杯,

麦克

答案 1 :(得分:2)

这将在模型和视图之间创建不必要的绑定。但也要考虑一个你可以进入的无限循环。

如果模型也是由视图以外的其他东西更新,也许是Web服务怎么办?然后,通过Web服务更改模型将导致视图发生变化,因为视图将观察模型。而且,当模型也观察到视图时,视图中的更改将触发模型的更改。看到这里的递归?绕过它并不困难,但会导致一个非常糟糕且难以维护的设计。

答案 2 :(得分:1)

为了将模型和视图结合在一起,已经提出的一个解决方案是添加一个Controller,以便您实现完整的模型 - 视图 - 控制器组件集。这在所有三个组件之间引入了非常紧密的耦合,从单元测试的角度来看并不是真正需要的。

另一种方法是考虑Model-View-Presenter pattern。 Presenter将是Model和View之间的中介,并将根据View的任何输入更新Model,并且还将负责根据Model中的任何更改更新视图。对于单元测试,您可以替换模拟视图来测试模型,或者使用模型模型来测试视图(或模拟两者以仅测试Presenter)。