2012-06-07 14 views
15

もっと詳しく知りたい場合は、この質問の最後の行を参照してください。私はすでに多くを読んだことがあります。私は何かを複雑なものに変えていると感じています。そして、私はまだここにこだわっていますので、それらの非常に具体的な点で私を助けることができます。スイングでJavaでMVCを正しく実装する方法は?

私はNetbeans IDE 7とJDK 7を使用していますが、フレームワークはありません。最初のWindowはJFrameであり、他のすべてのウィンドウはmodal = trueのJDialogです。

質問:私は正しくスイングでMVCパターンを実装するにはどうすればよい

  1. ? どちらの方が良いかというアイデアから:(A)または(B)?または別のもの...なぜそれは良いですか?

    (A) メイン:

    MyModel model 
    MyView view(model) 
    

    MYVIEW:

    MyController(this, model) 
    

    (B)
    メイン:

    MyModel model 
    MyView View 
    MyController controller(view, model) 
    
  2. 私は、メインフレームでjbutton1クリックし、私はそれを必要とします設定を編集するためにSettingsFrameを開きます。 SettingsFrameのビュー、モデル、コントローラはどこでインスタンス化する必要がありますか?メインフレームコントローラでは?

  3. MVCの構成と実装に関して、MVCの「足」(モデルやビューまたはコントローラのいずれか)のうちの1つまたは2つが欠けているような特定の機能をどのように処理すればよいでしょうか?私はそれらのための空のクラスを作成する必要がありますか?

    a. The implementation of a TrayIcon 
    b. A URL connection class (an HttpsUrlConnection which will update data in the main jframe and also upload/download files) 
    c. A Directory Monitor (which will update data in the main jframe and also use the urlconnection to download a file) 
    d. My own implementation of TableModel 
    e. json 
    
  4. アプリケーション全体の設定でオブジェクトを正しく保持して使用するにはどうすればよいですか?別の場所(ビュー、モデル、コントローラ)に情報が必要ですが、実行時にユーザーによって変更される可能性があります)。このモデルをシングルトンにするのは良い考えですか?

  5. 私は何をすべきとき:

    a. View needs some data from the Model? 
    What I'm doing: using the reference of Model which I keep in the View 
    b. View needs some data from the Controller? 
    What I'm doing: using the reference of Controller which I keep in the View 
    c. Model needs some data from the Controller? 
    Still didn't happen but I have no idea how to do correctly 
    d. Model needs some data from the View? 
    What I'm doing: pulling all my hair from my head... 
    e. Controller needs some data from the View? 
    What I'm doing: using the reference of the View which I keep in the Controller 
    f. Controller needs some data from the Model? 
    What I'm doing: using the reference of the Model which I keep in the Controller 
    g. One of FooModel, FooView or FooController needs data from one of BarModel, BarView or BarController? 
    What I'm doing: thinking of jumping from the highest building... 
    
  6. 私が正しくMVCを実装しているかどうかを知る方法上の任意のヒント?モデルやコントローラで大量のデータを処理する必要がありますか?

  7. 私も、私がやっている、DAOを使用していますが次のとおりです。私のモデルは

    のArrayListに、mymodel負荷を持っている()DAOのインスタンスを作成します

    方法とDAOから返されたモデルのArrayListを返します。モデルのこのArrayListを処理し、時にはコントローラが処理できるようにすることもあります。これは良い練習ですか、それとも良い方法ですか?プロセスとは、ArrayListを繰り返し処理し、モデルからデータを取得することです。

  8. パスワードビューjDialogを使用して、一部のビューへのアクセスを制限します。どのように私はMVCの面でそれを再使用することができますので、私は同じPasswordCheckダイアログを使用してコード内の混乱をせずに別のビューへのアクセスを許可/制限することができますか?

  9. その他のヒント、ヒント、アイデア、提案はありますか?

コンテキスト:デフォルトでは、私は、Java開発者じゃないので、特別に、MVCパターンを実装するために使用されていないが 私はJavaを開発するために必要だが、短時間でMVCソフトウェアスイングJava(私はアイデアを得るが、クラス間の関係を実装する知識が不足することがある)。 アプリケーションは、基本的に、このデータを表示するメインフレーム内のJTableを持つローカル/オンラインファイルのモニタです。私は新しいWatchService APIを使用してローカルファイルを追跡し、DAOを使用してh2データベースに情報を保存し、メインフレームのjtableにこのデータをリロードします。また、私はTrayIconを使用している新しいファイルについてユーザーに通知する必要があります。私はHttpsUrlConnectionとjsonを使用しているオンラインファイルの監視/アップロード/ダウンロードのために。また、設定のカスタマイズも可能です。

お時間をいただきありがとうございます。

答えて

7

Sun's (Oracle's) suggestionsをご覧ください。

単純化すると、各コンポーネント(モデル、ビュー、コントローラ)のレジスタを最上位のアプリケーションコンポーネントとすることで、各コンポーネント(AまたはB)間の個別参照ではなく単一参照ポイントを提供できます。私が引用した記事はプッシュ&プルデザインのアイデアを提供しています。私はより一般的な近代的なアプローチとしてプッシュをお勧めしたいと思います。開示:JavaとMVCの経験はありますが、Swing自体のMVCはありません。

のSettingsFrameのビュー、モデル、およびコントローラは、どこでインスタンス化する必要がありますか?

確かに、はい、または最上位アプリケーションコンポーネントです。

または2つのMVC「脚」(モデルまたはビューまたはコントローラのいずれか)が(明らかに)欠けている特定の機能をどのように処理する必要がありますか?

独自のGUIライブラリとしてGUI専用の部分を実装します。純粋にアルゴリズム/サービスは、サービスライブラリとして扱われます。

モデルまたはコントローラで大量のデータを処理する必要がありますか?

データ処理アルゴリズムはコントローラまたはサービスライブラリにも適しています。あなたのモデルは、データ型の変換や検証を超えて、あまり多くの処理を行うべきではありません。

アプリケーション全体の設定でオブジェクトを正しく保持して使用するにはどうすればよいですか?

私の登録時の注記を参照してください。シングルトンが適切かもしれません。

+0

+1私はリンクが気に入っているように思っていますが、私の努力でも私を助けてくれるでしょう:-)質問に+1して、とてもうまく説明すると、私は両方をアップアップしました: - ) –

+0

ありがとうございました。「登録時の私のメモを参照してください」とはどういう意味ですか?私は太陽の提案を前に見ましたが、あなたがそれを推奨して以来、私はもう少し詳しく注意深く読んで、疑問を解決しようとします。私もそれをupvoted。 – dcr

+4

+1この図と同様の[概要](http://stackoverflow.com/a/2687871/230513)に続くこの[example](http://stackoverflow.com/a/3072979/230513)も参照してください。引用した。 – trashgod

関連する問題