Não consigo descobrir uma solução melhor para o meu problema. Eu tenho um controlador de exibição que apresenta uma lista de elementos. Esses elementos são modelos que podem ser uma instância de B, C, D, etc e herdar de A. Portanto, nesse controlador de exibição, cada item deve ir para uma tela diferente do aplicativo e passar alguns dados quando o usuário seleciona um deles . As duas alternativas que me vêm à cabeça são (ignore a sintaxe, não é um idioma específico)
1) interruptor (eu sei que é uma porcaria)
//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);
}
Meu problema com a solução 2 é que, como B, C, D, etc. são modelos, eles não devem saber sobre coisas relacionadas à exibição. Ou deveriam, nesse caso?