2017-11-16 10 views
2

私はそれが世界で最もすばらしいタイトルではないことを知っています。 私はJavaでアプリケーションを開発していますが、その一部はMVCデザインパターンを使用しています。JavaでMVCオブジェクトをインスタンス化するときの依存関係の処理

UML

は、上記には、MVC構造の私の理解である、または少なくともどのように私はそれを実装することを選択しています。しかし、私はオブジェクトをインスタンス化する問題に遭遇しました。任意のコントローラは、それへの参照がビューペアだし、任意のビューはそれへの参照を必要と必要とするのでコントローラペアは、私が実際にオブジェクトを作成するかどうかはわかりませんです。

私はビューをコントローラにnullとして渡してすぐに設定することができますが、これは悪いコーディング練習のように感じるだけでなく、実際にビューを作成する場所について質問をしました。それは通常コントローラに委任されたものですか?どんな指針も大変ありがとうございます。

+0

をなぜビューは、そのコントローラーを知っている必要がありますか?実際、それは望ましくない別のカップリングを導入する。代わりに、ビューでは、(スケッチしたような)オブザーバパターンを使ってモデルの変化に簡単に反応することができます。実際にコントローライベントに反応する必要がある場合は、ここでオブザーバーパターンを使用することもできます。これは、AWTとSwingが['ActionListener'](https://docs.oracle.com/javase/9​​/docs/api/java/awt/event/ActionListener.html)で行うことです(btw)。 – Seelenvirtuose

+0

また、次の画像をご覧ください:https://manikandanmv.files.wordpress.com/2010/11/mvc-architecture.gif?w=450&h=315記述された_events_は、通常オブザーバパターンを介して実装されます。 – Seelenvirtuose

+0

ああ、ちょっと読んだら、ViewとControlerのクラスを一緒に組み込むつもりだと思います。なぜなら、これはスイングとMVCを処理する一般的な方法だからです。助けてくれてありがとう! – Jeremy

答えて

1

あなたは、このような他のコンストラクタのパラメータとして1を渡すことができます。

public class Controller { 
    private View view; 

    public Controller() { 
     this.view = new View(this); 
    } 
} 

public class View { 
    private Controller controller; 

    public View(Controller controller) { 
     this.controller = controller; 
    } 
} 
関連する問題