Java、Swing、MVC、および SwingWorker についてよく読んでいますが、MVC でのモデルの役割については完全に混乱しています。
私は2つのボタンを持つアプリを構築しています:
- ファイルを選ぶ
- ファイルを読む
ロギングに使用されるテキストボックスもあります。
私が現在していること:
- ビューにはウィジェットが含まれていますが、ロジックは含まれていません
- ボタンの actionPerformed() メソッドは、コントローラのメソッドを呼び出します
- コントローラーは、ファイルを取得するために必要なデータ (OptionPane.showOpenDialog() の表示を含む) をフェッチします。
- ファイル参照はモデルに保存されます。
- モデルは、新しいファイルのビューに (PropertyChangeSupport、オブザーバー パターン) を通知します。
- ビューは「ファイルの読み取り」ボタンを有効にします
私の最初の質問:モデルに状態を保存する必要がありますか? つまり、一連の操作に関連する情報です。ファイルを読み取る前に、まずファイルを選択する必要があります。したがって、私のモデルはステートマシンになります。
2 番目の質問: Controller に OptionPane を表示させるのは正しいですか?
それから楽しみが始まります。ユーザーは「ファイルの読み取り」ボタンをクリックします。「ファイルの選択」ボタンとほぼ同じことをしています。View は Controller を呼び出しますが、Controller は SwingWorker を使用してファイルを読み取ります。これは EDT で行うべきではないためです。SwingWorker は、View (SwingWorker.process() メソッド) への参照を介してテキスト ボックスに追加される中間ログ メッセージを発行します。コントローラは、SwingWorker からの「状態」プロパティの変更をリッスンします。「状態」が「DONE」の場合、コントローラーは「get()」関数を呼び出します。すべてが OK であれば、結果がモデルに設定されます。そうでない場合は、例外が処理されます。
私の 3 番目の最も重要な質問: モデルはファイルの読み取りを行うべきではありませんか?! MVC の全体的なポイントは、すべての利点 (テスト容易性など) を備えた関心の分離です。新しいビュー (例: CLI) が必要な場合はどうすればよいですか? 次に、私のモデルはデータモデルのみになります。ファイルの読み取り方法についての手がかりがありません。スレッドの問題はどうですか?
うまくいけば、私に良いアドバイスを与えることができます。インターネット上には SwingWorker や MVC などに関する例がたくさんあります。しかし、私の問題はそれらに対してどのようにコーディングするかではなく、どのように設計するかです。