Я не могу найти лучшее решение моей проблемы. У меня есть контроллер представления, который представляет список элементов. Эти элементы являются моделями, которые могут быть экземплярами 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 и т. Д. Являются моделями, они не должны знать о вещах, связанных с просмотром. Или они должны в этом случае?