Создание дочерних представлений в шаблоне пассивного просмотра

StackOverflow https://stackoverflow.com/questions/2254855

  •  20-09-2019
  •  | 
  •  

Вопрос

Мне очень интересно использовать шаблон пассивного просмотра для улучшения тестируемости, но я не знаю, как вызывать дочерние диалоги.

Есть ли у вас родительское представление, создающее дочернее представление и возвращающее интерфейс родительскому контроллеру, а затем родительский контроллер создает дочерний контроллер?

Это было полезно?

Решение

Я много думал об этом и думаю, что у меня есть несколько возможных решений.

  1. Добавьте метод в класс представления для создания подчиненного диалога.
  2. Создайте фабрику, генерирующую модель, представление.и контроллер подчиненного диалога

Способ 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;
  }
}

Способ 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top