2010-08-17 63 views
2

我有一个引用视图的模型,一个引用了模型和视图的控制器,以及一个没有引用上面的解耦视图。这是在java中使用MVC的正确方法吗?

控制器具有视图的所有侦听器,并通过调用模型和视图上的方法来处理事件。该模型在其某些方法中调用视图上的方法。

这对维护和重用是否有害,应该只在控制器中调用所有视图方法吗?此外,我还没有将模型设置为observable,控制器和视图作为观察者,如某些示例所示。这是常见的做法吗?

+0

如果没有参考视图到模型,视图如何知道要显示的内容? – mdma 2010-08-17 14:11:13

+0

@mdma视图应该知道模型,而不是反之亦然 – 2010-08-17 14:14:29

+0

@Romain - 这就是我所追求的。OP表示该模型知道该视图,而不是相反。 – mdma 2010-08-17 14:17:25

回答

2

我会避免直接耦合从模型到视图,或者至少只能作为非常特殊的情况(即使在当时,这可能暗示,该国被操纵是不正确的模型状态,但呈现的状态。)

通常,模型使用侦听器来通知更改,而不是直接耦合到视图。该视图可以直接引用该模型,以便它可以获取要显示的数据。虽然这可能不是绝对必要的 - 但是在视图需要时,所有更改都可以作为侦听器通知从模型传播到视图,但这通常是一个坏主意,因为它将视图的呈现与来自该模型。

综上所述,控制器对通知感兴趣方(包括视图)的模型进行了更改。该视图提供了检索数据的模型。

1

遵循经典的MVC模式,模型不能直接访问视图。但是,间接访问 - 例如通过观察者 - 可以帮助提醒视图对基础数据的更改。

1

模型不应该对视图有任何了解。 视图应该知道如何在给定模型的情况下自行填充。

如果您的模型将要更改,它可能想让视图知道任何更改,以便显示可以更改。

0

Sun.com上有一篇不错的博客文章:Java SE Application Design With MVC。它首先解释视图和模型直接相互作用的“经典”MVC模式,然后继续使用新的“集中控制器”MVC模式,其中视图和模型只能通过控制器相互通信(模型是与视图分离)。它也包含一个Swing目标示例。

0

在桌面上Swing是一个很好的GUI库。查看article以了解它与MVC的关系。对于企业,请查看Martin Fowler的模型视图控制器模式(330)以了解基于Web的应用程序。如果您没有他的书(企业应用程序架构模式),我强烈建议您获取副本。

相关问题