Saya tidak dapat menemukan solusi yang lebih baik untuk masalah saya. Saya memiliki pengontrol tampilan yang menyajikan daftar elemen. Elemen-elemen itu adalah model yang bisa menjadi instance dari B, C, D, dll dan mewarisi dari A. Jadi dalam view controller itu, setiap item harus menuju ke layar aplikasi yang berbeda dan meneruskan beberapa data ketika pengguna memilih salah satunya . Dua alternatif yang muncul di pikiran saya adalah (tolong abaikan sintaksnya, itu bukan bahasa tertentu)
1) beralih (saya tahu itu menyebalkan)
//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) polimorfisme
//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);
}
Masalah saya dengan solusi 2 adalah karena B, C, D, dll adalah model, mereka seharusnya tidak tahu tentang hal-hal terkait tampilan. Atau haruskah mereka dalam kasus itu?