編集 (16.05.2013):
3 番目のソリューションを使用します。みんな助けてくれてありがとう。
編集の終わり (16.05.2013)
更新メソッドを持つビュー (コントローラー内) があります。メソッドは多くのクラスから呼び出される必要があります。だから私は2つの解決策を考え出しました:
- update メソッドを呼び出す必要があるすべてのクラスで、View/Controller のフィールドを作成します。
- 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)