Я не можу знайти краще рішення своєї проблеми. У мене є контролер подання, який представляє список елементів. Ці елементи є моделями, які можуть бути екземплярами B, C, D тощо, і успадковуватимуся A. Отже, у цьому контролері перегляду кожен елемент повинен перейти на інший екран програми та передавати деякі дані, коли користувач вибирає один із них . Дві альтернативи, які мені спадають на думку, є (будь ласка, ігноруйте синтаксис, це не конкретна мова)
1) перемикач (я знаю, що смокче)
//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) поліморфізм
//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);
}
Моя проблема з рішенням 2 полягає в тому, що оскільки B, C, D тощо є моделями, вони не повинні знати про пов'язані з переглядом речі. Або вони повинні в такому випадку?