在MVC中,模型做了什么以及与SwingWorker的关系是什么?
我读了很多关于Java,Swing,MVC和SwingWorker的内容,但我对模型在MVC中的作用感到困惑。
我正在构建一个有两个按钮的应用程序:
选择文件
读取文件
还有一个用于记录的文本框。
我目前在做什么:
视图包含小部件,但没有逻辑
按钮的actionPerformed()方法调用Controller上的方法
Controller将获取所需数据(包括显示OptionPane.showOpenDialog())以获取文件
文件引用存储在模型中。
模型通知(PropertyChangeSupport,Observer模式)新文件的视图。
View启用“读取文件”按钮
我的第一个问题:我应该将状态存储在模型中吗?也就是说,与操作顺序有关的信息:首先必须在可以读取文件之前选择文件。那么我的模型将成为状态机。
我的第二个问题:我让Controller显示OptionPane是否正确?
然后开始有趣。用户单击“读取文件”按钮。我做的与“选择文件”按钮大致相同。 View调用Controller,但Controller使用SwingWorker读取文件,因为这不应该在EDT上完成。 SwingWorker发布中间日志消息,这些消息通过对View(SwingWorker.process()方法)的引用添加到文本框中。 Controller从SwingWorker中侦听“状态”属性更改。当'state'为'DONE'时,Controller调用'get()'函数。如果一切正常,结果将在模型中设置。如果不是,则处理异常。
我的第三个也是最重要的问题:模型不应该读文件吗?! MVC的重点在于关注点的分离,以及所有的好处(可测试性等)。如果我想要一个新视图(例如CLI)怎么办?那么我的模型现在只是一个数据模型。它没有关于如何读取文件的线索!那么线程问题呢?
希望你能给我一些好的建议。互联网上有很多关于SwingWorker,MVC等的例子。但我的问题不在于如何对它们进行编码,而是如何设计。
没有找到相关结果
已邀请:
1 个回复
粱委教