我想不出更好的解决方案。我有一个显示元素列表的视图控制器。这些元素是可以作为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等是模型,因此他们不应该了解与视图相关的内容。还是在那种情况下应该?