Je ne peux pas trouver une meilleure solution à mon problème. J'ai un contrôleur de vue qui présente une liste d'éléments. Ces éléments sont des modèles qui peuvent être une instance de B, C, D, etc. et hériter de A. Donc, dans ce contrôleur de vue, chaque élément doit aller à un écran différent de l'application et transmettre des données lorsque l'utilisateur sélectionne l'un d'entre eux . Les deux alternatives qui me viennent à l'esprit sont (veuillez ignorer la syntaxe, ce n'est pas un langage spécifique)
1) interrupteur (je sais que ça craint)
//inside the view controller
void onClickItem(int index) {
A a = items.get(index);
switch(a.type) {
case b:
B b = (B)a;
go to screen X;
x.v1 = b.v1; // fill X with b data
x.v2 = b.v2;
case c:
go to screen Y;
etc...
}
}
2) polymorphisme
//inside the view controller
void onClickItem(int index) {
A a = items.get(index);
Screen s = new (a.getDestinationScreen()); //ignore the syntax
s.v1 = a.v1; // fill s with information about A
s.v2 = a.v2;
show(s);
}
//inside B
Class getDestinationScreen(void) {
return Class(X);
}
//inside C
Class getDestinationScreen(void) {
return Class(Y);
}
Mon problème avec la solution 2 est que, puisque B, C, D, etc. sont des modèles, ils ne devraient pas connaître les éléments liés à la vue. Ou devraient-ils dans ce cas?