0

我正在用 Java 开发一个应用程序,并且我正在使用 Swing 作为 GUI。我打算使用 Martin Fowler 在这里介绍的演示模型模式:http ://martinfowler.com/eaaDev/PresentationModel.html

但我真的不喜欢在我的 Presentation Model 类中处理 View ,所以我发现我可以用不同的方式来做。

在我的方法中,我将有一个 CustomViewModel 类扩展 Swing 组件模型(如 JTable 的 TableModel 或 JButton 的 ButtonModel)。此类将覆盖用户更新模型数据时执行的方法。所以我会做我的工作,比如更新 DomainModel 然后调用 parents 方法。这样,我将始终在 DomainModel 和 ViewModel 之间保持数据同步。

例如:

class MyCustomJTableModel extends TableModel{
   ... overriding required methods for synchronization
}

在设置 gui 功能中,我将拥有:

JTable table = new JTable();
MyCustomJTableModel model = new MyCustomJTableModel();
model.setDataSource( Database.getDB().getModelFor( "model.name" ) );
table.setModel( model )
View view = new View();
view.addComponent( "JTableModel", model );

ResourceHandler rH = new ResourceHandler();
rH.add( model );

所以现在在我的控制器功能中,我可以拥有:

public class FileOpenCOntroller{
    public void perform(ResourceHandler rH){

        MyCustomTableModel model = rH.getModel("JTableModel");
        model.loadDataFromDataSource( "File.xml" );
    }
}

就是这样,MyCustomTableModel 已经覆盖了 JTable 用来更新其内容的方法,并且在实际调用父母 setModel 之前让我的代码更新实际模型。无需查看参考。问题是当我需要处理与其他组件没有相似关系的 JFileChooser 时。我说的是一些 ViewModel 类。

有谁知道如何解决这种方法。

我想要实现的不是在 MyCustomComponentModel 和 Controller 中都引用 View。我想通过一组CustomComponentModel在控制器和视图之间进行通信,它扩展了TableModel、ButtonModel等视图模型。这样做的目的是更容易TDD。在这种方法中,仅未测试事物的布局。

4

0 回答 0