Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 模型可以观察视图吗?_Java_Model View Controller_Design Patterns_Oop - Fatal编程技术网

Java 模型可以观察视图吗?

Java 模型可以观察视图吗?,java,model-view-controller,design-patterns,oop,Java,Model View Controller,Design Patterns,Oop,我正在用Java开发一个应用程序,在我的GUI中有几个jpanel,上面有很多设置,这就是视图。在这几个jpanel的背景中只有一个模型。通常,我会从JPanels中观察模型 我只是想知道,从模型观察视图是否是一种好的做法?因为,用户更改了视图,此更改必须影响我的模型。还是我遗漏了一些重要的原则?谢谢你的帮助。我认为你质疑这一点很好 您缺少的可能有帮助的部分是控制器 请查看一个示例 基本上,控制器是模型和视图之间的中介。它“控制”应用程序。视图应该知道的唯一一件事是传递给它的数据以及如何显示它。

我正在用Java开发一个应用程序,在我的GUI中有几个
jpanel
,上面有很多设置,这就是视图。在这几个
jpanel
的背景中只有一个模型。通常,我会从
JPanels
中观察模型


我只是想知道,从模型观察视图是否是一种好的做法?因为,用户更改了视图,此更改必须影响我的模型。还是我遗漏了一些重要的原则?谢谢你的帮助。

我认为你质疑这一点很好

您缺少的可能有帮助的部分是控制器

请查看一个示例

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

使用这种设计可以得到一个loosley耦合且易于测试的应用程序。它真的很优雅

干杯


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


如果模型也由视图(可能是web服务)以外的其他对象更新,该怎么办?然后,通过web服务更改模型将导致视图的更改,因为视图将观察模型。而且,当模型也在观察视图时,视图中的更改将触发模型中的更改。看到这里的递归了吗?绕过它并不太困难,但会导致非常糟糕且无法维护的设计。

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


另一种选择是考虑。演示者将是模型和视图之间的中介,并将根据来自视图的任何输入更新模型,还将负责根据模型中的任何更改更新视图。对于单元测试,您将能够替换一个模拟视图来测试模型,或者替换一个模拟模型来测试视图(或者同时替换两个模型来测试演示者)

是的,正是无限循环让我提出了这个问题。现在事情变得越来越清楚了,谢谢..我同意,MVP更清晰了,只有一种解释。我最喜欢的MVC图: