小编Rob*_*Rob的帖子

在MVC中,模型做了什么以及与SwingWorker的关系是什么?

我读了很多关于Java,Swing,MVC和SwingWorker的内容,但我对模型在MVC中的作用感到困惑.

我正在构建一个有两个按钮的应用程序:

  1. 选择文件
  2. 读取文件

还有一个用于记录的文本框.

我目前在做什么:

  1. 视图包含小部件,但没有逻辑
  2. 按钮的actionPerformed()方法调用Controller上的方法
  3. Controller将获取所需数据(包括显示OptionPane.showOpenDialog())以获取文件
  4. 文件引用存储在模型中.
  5. 模型通知(PropertyChangeSupport,Observer模式)新文件的视图.
  6. View启用"读取文件"按钮

我的第一个问题:我应该将状态存储在模型中吗?也就是说,与操作顺序有关的信息:首先必须在可以读取文件之前选择文件.那么我的模型将成为状态机.

我的第二个问题:我让Controller显示OptionPane是否正确?

然后开始有趣.用户单击"读取文件"按钮.我做的与"选择文件"按钮大致相同.View调用Controller,但Controller使用SwingWorker读取文件,因为这不应该在EDT上完成.SwingWorker发布中间日志消息,这些消息通过对View(SwingWorker.process()方法)的引用添加到文本框中.Controller从SwingWorker中侦听"状态"属性更改.当'state'为'DONE'时,Controller调用'get()'函数.如果一切正常,结果将在模型中设置.如果不是,则处理异常.

我的第三个也是最重要的问题:模型不应该读文件吗?!MVC的重点在于关注点的分离,以及所有的好处(可测试性等).如果我想要一个新视图(例如CLI)怎么办?那么我的模型现在只是一个数据模型.它没有关于如何读取文件的线索!那么线程问题呢?

希望你能给我一些好的建议.互联网上有很多关于SwingWorker,MVC等的例子.但我的问题不在于如何对它们进行编码,而是如何设计.

java model-view-controller swing swingworker

4
推荐指数
1
解决办法
1419
查看次数

标签 统计

java ×1

model-view-controller ×1

swing ×1

swingworker ×1