문제

수동 뷰 패턴을 사용하여 테스트 가능성을 향상시키는 데 매우 관심이 있지만 어린이 대화를 호출하는 방법은 확실하지 않습니다.

상위보기가 있습니까? 자식보기를 만들고 상위 컨트롤러에 인터페이스를 반환 한 다음 부모 컨트롤러에 자식 컨트롤러를 만들도록합니까?

도움이 되었습니까?

해결책

나는 이것에 대해 많이 생각해 왔으며 몇 가지 가능한 해결책이 있다고 생각합니다.

  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