Non riesco a trovare una soluzione migliore al mio problema. Ho un controller di visualizzazione che presenta un elenco di elementi. Tali elementi sono modelli che possono essere un'istanza di B, C, D, ecc. Ed ereditati da A. Quindi, in quel controller di visualizzazione, ogni elemento dovrebbe passare a una schermata diversa dell'applicazione e passare alcuni dati quando l'utente seleziona uno di essi . Le due alternative che mi vengono in mente sono (per favore ignora la sintassi, non è un linguaggio specifico)
1) interruttore (so che fa schifo)
//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);
}
Il mio problema con la soluzione 2 è che dato che B, C, D, ecc. Sono modelli, non dovrebbero conoscere le cose relative alla vista. O dovrebbero in quel caso?