Nie mogę znaleźć lepszego rozwiązania mojego problemu. Mam kontroler widoku, który przedstawia listę elementów. Te elementy to modele, które mogą być instancjami B, C, D itp. I dziedziczyć po A. W tym kontrolerze widoku każdy element powinien przejść do innego ekranu aplikacji i przekazać niektóre dane, gdy użytkownik wybierze jeden z nich . Dwie alternatywy, które przychodzą mi do głowy to (zignoruj składnię, to nie jest konkretny język)
1) przełącznik (wiem, że jest do bani)
//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) polimorfizm
//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);
}
Mój problem z rozwiązaniem 2 polega na tym, że ponieważ B, C, D itp. Są modelami, nie powinni wiedzieć o rzeczach związanych z wyświetlaniem. A może powinni w takim przypadku?