Java 在MVC中,模型做什么?与SwingWorker有什么关系?
我读了很多关于Java、Swing、MVC和SwingWorker的书,但是我完全搞不清模型在MVC中的作用 我正在构建一个有两个按钮的应用程序:Java 在MVC中,模型做什么?与SwingWorker有什么关系?,java,model-view-controller,swing,swingworker,Java,Model View Controller,Swing,Swingworker,我读了很多关于Java、Swing、MVC和SwingWorker的书,但是我完全搞不清模型在MVC中的作用 我正在构建一个有两个按钮的应用程序: 选择文件 读取文件 还有一个用于记录日志的文本框 我目前正在做的事情: 视图包含小部件,但没有逻辑 按钮的actionPerformed()方法调用控制器上的方法 控制器将获取获取文件所需的数据(包括显示OptionPane.showOpenDialog()) 文件引用存储在模型中 模型通知(PropertyChangeSupport,观察者模式)新
希望你能给我一些好的建议。互联网上有很多关于SwingWorker、MVC等的例子,但我的问题不在于如何针对它们进行编码,而在于如何进行设计。我认为你已经走上正轨了。逐一回答您的问题: 1。我应该在模型中存储状态吗? 是的,您可以而且应该在模型中存储状态——模型是改变状态的状态和行为 2。我让控制器显示选项窗格是否正确? 是的-应用程序设计(逻辑流)决定文件来自何处-模型当然不关心如何获得要读取的文件名,只关心它获得一个文件名。流是控制器的域 3。模型不应该读取文件吗? 是的,文件读取也是模型的一部分。即使控制器正在调用swing worker,swing worker在概念上也是模型的一部分,至少是由swing worker执行的主要逻辑。理想情况下,加载文件的所有逻辑都存在于模型类中。然后,控制器可以安排使用swing worker调用它。控制器决定在后台线程上加载文件,并指示模型从后台加载文件。控制器的swing worker从模型接收加载进度事件,并通过调用publish()处理这些事件,然后process()更新UI 原则上,您应该能够将整个应用程序重写为控制台应用程序,而无需更改模型。当然,视图会发生变化,但这是因为它现在必须使用stdout而不是Swing来显示模型。最大的变化发生在控制器中——应用程序流将有所不同(文件选择来自程序参数),控制器不再侦听按钮单击以引导流,而是具有固定流,或者通过stdin与用户交互。控制器中的线程模型不同-不需要担心EDT,因此不需要swing worker
因此,您可以看到,模型负责状态和对该状态的更改,视图负责显示状态,控制器执行其他所有操作,特别是将模型连接到视图 我在MVC和Swing上看到的最简洁的帖子之一——谢谢!