0

Java でアプリケーションを開発しており、GUI に Swing を使用しています。ここで Martin Fowler によって導入されたプレゼンテーション モデル パターンを使用してそれを行うつもりでした: http://martinfowler.com/eaaDev/PresentationModel.html

しかし、Presentation Model クラス内で View を処理しなければならないときは本当に好きではないので、別の方法で処理できると考えています。

私のアプローチでは、Swing コンポーネント モデル (JTable の TableModel や JButton の ButtonModel など) を拡張する CustomViewModel クラスを用意します。このクラスは、ユーザーがモデルのデータを更新するときに実行されるメソッドをオーバーライドします。だから私は DomainModel を更新してから親メソッドを呼び出すような仕事をします。このようにして、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 を参照しないことです。TableModel、ButtonModel などのビュー モデルを拡張する CustomComponentModel のセットを介して、コントローラーとビューの間の通信を行いたいと思います。その目的は、TDD を容易にすることです。このアプローチでは、物事のレイアウトのみがテストされません。

4

0 に答える 0