模型可以观察视图吗?

模型可以观察视图吗?

问题描述:

我正在开发一个Java应用程序,在我的GUI中,我有几个JPanels与他们的很多设置,这将是查看。在这几个JPanels的背景中,只有一个型号。通常情况下,我会观察模式JPanels模型可以观察视图吗?

我只是想知道,是不是很好的做法,从模式观察查看?因为,用户改变查看,而这种变化必须影响我模式。或者我在这里错过了一些重要的原则?谢谢您的帮助..

我认为它的伟大,你都在质疑这一点。

哪一部分你缺少能够帮助是控制器。

查看样例http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

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

使用这种设计得到的是松散耦合且易于测试的应用程序。它真的是优雅恕我直言。

干杯,

迈克

+0

我会研究一下,谢谢。 – 2010-01-20 00:55:47

+1

我最喜欢的MVC图:http://java.sun.com/blueprints/patterns/images/mvc-structure-generic.gif – trashgod 2010-01-20 01:55:31

这可能会造成不必要的模型和视图之间的结合。但是也要考虑一下你可以进入的无限循环。

如果模型也被视图以外的东西更新,或许是一个Web服务?然后,通过Web服务对模型进行更改将导致视图中的更改,因为视图将会观察模型。而且视图的变化也会引发模型的变化,因为模型也在观察视图。在这里看到递归?绕过它并不难,但会导致一个非常糟糕和不可维护的设计。

+0

是的,这是无限的循环让我问这个问题。事情越来越清晰了,谢谢.. – 2010-01-20 01:03:04

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

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

+0

我同意,MVP非常干净,只有一种解释。 – Anurag 2010-01-20 01:30:17