수동적보기 패턴에서 어린이보기 생성
-
20-09-2019 - |
문제
수동 뷰 패턴을 사용하여 테스트 가능성을 향상시키는 데 매우 관심이 있지만 어린이 대화를 호출하는 방법은 확실하지 않습니다.
상위보기가 있습니까? 자식보기를 만들고 상위 컨트롤러에 인터페이스를 반환 한 다음 부모 컨트롤러에 자식 컨트롤러를 만들도록합니까?
해결책
나는 이것에 대해 많이 생각해 왔으며 몇 가지 가능한 해결책이 있다고 생각합니다.
- 뷰 클래스에 메소드를 추가하여 하위 문자 대화 상자를 생성합니다.
- 모델을 생성하는 공장을 만듭니다. 및 종속 대화 상자의 컨트롤러
방법 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
제휴하지 않습니다 StackOverflow