No puedo encontrar una mejor solución a mi problema. Tengo un controlador de vista que presenta una lista de elementos. Esos elementos son modelos que pueden ser una instancia de B, C, D, etc. y heredar de A. Por lo tanto, en ese controlador de vista, cada elemento debe ir a una pantalla diferente de la aplicación y pasar algunos datos cuando el usuario selecciona uno de ellos . Las dos alternativas que se me ocurren son (ignore la sintaxis, no es un lenguaje específico)
1) cambiar (sé que apesta)
//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) polimorfismo
//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);
}
Mi problema con la solución 2 es que, dado que B, C, D, etc.son modelos, no deberían saber sobre cosas relacionadas con la vista. ¿O deberían en ese caso?