ฉันไม่สามารถหาทางออกที่ดีกว่าสำหรับปัญหาของฉัน ฉันมีตัวควบคุมมุมมองที่นำเสนอรายการองค์ประกอบ องค์ประกอบเหล่านั้นเป็นแบบจำลองที่สามารถเป็นตัวอย่างของ B, C, D, ฯลฯ และสืบทอดจาก A. ดังนั้นในตัวควบคุมมุมมองแต่ละรายการควรไปที่หน้าจอที่แตกต่างกันของแอปพลิเคชันและส่งผ่านข้อมูลบางส่วนเมื่อผู้ใช้เลือกหนึ่งในนั้น . ทางเลือกสองทางที่อยู่ในใจของฉันคือ (กรุณาเพิกเฉยไวยากรณ์ไม่ใช่ภาษาที่เฉพาะเจาะจง)
1) สวิตช์ (ฉันรู้ว่า sucks)
//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 และอื่น ๆ เป็นรุ่นพวกเขาไม่ควรรู้เกี่ยวกับสิ่งที่เกี่ยวข้องกับการดู หรือพวกเขาควรในกรณีที่?