Non riesco a trovare una soluzione migliore al mio problema. Ho un controller di visualizzazione che presenta un elenco di elementi. Questi elementi sono modelli che possono essere un'istanza di B, C, D, ecc. Ed ereditano 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 ignori la sintassi, non è una lingua specifica)
1) interruttore (lo 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 poiché B, C, D, ecc. sono modelli, non dovrebbero sapere cose relative alla vista. O dovrebbero in quel caso?