2

編集 (16.05.2013):

3 番目のソリューションを使用します。みんな助けてくれてありがとう。

編集の終わり (16.05.2013)

更新メソッドを持つビュー (コントローラー内) があります。メソッドは多くのクラスから呼び出される必要があります。だから私は2つの解決策を考え出しました:

  1. update メソッドを呼び出す必要があるすべてのクラスで、View/Controller のフィールドを作成します。
  2. update メソッドを静的にします。

2 つ以上のクラスが同時に update メソッドを呼び出すと、より良い (M)VC 設計とは?

単純化された例 1:

public class View{
    public void update(){}
}

// Many classes:
public class AClass{
    private View view;

    private void aMethod(){
        view.update();
    }
}

単純化された例 2:

public class View{
    public static void update(){}
}

// Many classes:
public class AClass{

    private void aMethod(){
        View.update();
    }
}

編集 (12.05.2013):特に OOP の場合、「静的ソリューション」は良くないことに同意します。

少し単純化しすぎたので、実際のデザインは次のとおりです。

MVC で設計されたプログラムがいくつかあり、それらを「大きな」プログラムにまとめたいとしますが、プログラムは時々対話する必要があります。

public class AView{
    public void update(){}
}

public class AModel{}

//Many of these:
public class AController{
    private AView aview;
    private AModel amodel;

    public AController(AView aview, AModel amodel){
        this.aview=aview;
        this.amodel=amodel;
    }
}

public class MainController{
    public MainController(){
        AView view1 = new AView();
        AModel model1 = new AModel();
        AController controller1 = new AController(view1, model1);

        AView view2 = new AView();
        AModel model2 = new AModel();
        AController controller2 = new AController(view2, model2);

        AView view3 = new AView();
        AModel model3 = new AModel();
        AController controller3 = new AController(view3, model3);
    }
}

ここで、controller1 と controller2 が view3 の update メソッドを呼び出す必要があるとします。私の現在の解決策は、コントローラー1とコントローラー2に視野3を作成することです(あなたが提案したように)。

AController controller1 = new AController(view1, view3, model1);
AController controller2 = new AController(view2, view3, model2);

それとも、設計全体をリファクタリングするか、コントローラー間に「ブリッジ」を作成する必要がありますか? その「橋」はどのように見えるでしょうか?

編集終了 (12.05.2013)

編集 (14.05.2013): 3 番目の解決策を見つけました。すべてのコントローラーが独自のイベントを発生させます。例えば:

Controller1 と Controller2 がイベントを発生させ、Controller3 がそれらをリッスンしてから、View3 の update メソッドを呼び出します。このソリューションについてどう思いますか?

編集終了 (14.05.2013)

4

3 に答える 3

5

静的ソリューションを捨ててください。これを考慮することさえしないでください。これを行うと、すべての OOP が窓の外に捨てられます。update()必要に応じてビューのメソッドを呼び出す public メソッドを Control に与えます。

そうは言っても、あなたの質問は密結合に関して私に懸念を与えます。

ビューの更新を呼び出す必要があるこれらの他のクラスは、コントロール クラス/ライブラリの一部ですか? コントロールのみがビューの更新を呼び出す必要があります。


編集、あなたは次のように述べています:

「静的メソッドはすべての OOP をウィンドウからスローします」について詳しく説明してください。

メソッドを静的にすると、継承できなくなります。さらに重要なことに、クラスのインスタンスのメソッドではなく、クラスのオブジェクトのメソッドになります。そのため、個別のインスタンスは呼び出す独自のメソッドを持たなくなり、インスタンスから状態データを取得することも、インスタンスの状態を変更することもできなくなります。

于 2013-05-12T00:18:06.483 に答える