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 を容易にすることです。このアプローチでは、物事のレイアウトのみがテストされません。