Frage

Ich interessierte mich sehr für die Passive Ansicht Muster mit Testbarkeit zu verbessern, aber ich bin nicht sicher, wie Kind Dialoge nennen.

Haben Sie die übergeordnete Ansicht, das Kind Ansicht erstellen und eine Schnittstelle zur übergeordneten Steuerung zurückkehrt, haben dann die übergeordnete Steuerung die Kind-Controller erstellen?

War es hilfreich?

Lösung

Ich habe darüber nachgedacht viel und ich glaube, ich habe ein paar mögliche Lösungen.

  1. ein Verfahren in die Ansichtsklasse Fügen Sie den untergeordneten Dialog
  2. zu erzeugen,
  3. Erstellen Sie eine Fabrik, die das Modell erzeugt, Ansicht. und Controller für den untergeordneten Dialog

Methode 1

class ParentView extends JDialog implements IParentView {
  public IChildView newChildView(...) {
    return new ChildView(...);
  }
  // ...
}

interface IParentView {
  IChildView newChildView(...);
  // ...
}

class ParentController {
  private IParentView view;
  public ParentController(IParentView view) {
    this.view  = view;
  }

  public void showChildView() {
    IChildView childView = view.newChildView();
    ChildController childController = new ChildController(childView);
    childView.setVisible(true);
  }
}

class ChildView extends JDialog implements IChildView {
  // ...
}

interface IChildView {
  void setVisible(boolean visible);
}

class ChildController {
  private IChildView view;
  public ChildController(IChildView view) {
    this.view = view;
  }
}

Methode 2

// During testing, create a mock ChildFactory and assign it to instance
class ChildFactory implements IChildFactory {
    private static IChildFactory instance;
    public static ChildFactory getInstance() {
      if (instance == null) {
        instance = new ChildFactory();
      }
      return instance;
    }
    public static void setInstance(IChildFactory factory) {
      instance = factory;
    }
    public void createChild(IParentView parent) {
      IChildView view = new ChildView(parent);
      ChildController controller = new ChildController(view);
      view.setVisible(true);
    }
}

interface IChildFactory {
  void createChild(IParentView parent);
}

class ParentController {
  private IParentView view;
  public ParentController(IParentView view) {
    this.view  = view;
  }
  public void showChildView() {
    ChildFactory.getInstance().createChild(view);
  }
}

// ParentView class similar to method 1
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top