Création de vues de l'enfant dans le modèle Voir passif
-
20-09-2019 - |
Question
Je suis très intéressé à utiliser le modèle de vision passive pour améliorer la testabilité, mais je ne suis pas sûr de savoir comment appeler les boîtes de dialogue de l'enfant.
Avez-vous la vue parent créer la vue enfant et retourner une interface au contrôleur mère, avez alors le contrôleur de parent créer le contrôleur de l'enfant?
La solution
J'ai pensé à cela beaucoup et je pense que j'ai deux ou trois solutions possibles.
- Ajoutez une méthode à la classe de vue de générer la boîte de dialogue subordonnée
- Créer une usine qui génère le modèle, vue. et contrôleur pour la boîte de dialogue subordonné
Méthode 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;
}
}
Méthode 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow