ตามคำตอบอื่น ๆ ได้ชี้ให้เห็นว่านี่ไม่ใช่การออกแบบที่ไม่ดีนัก มันสามารถสร้างการเชื่อมต่อที่แน่นหนาระหว่างคลาสที่ซ้อนกันและคลาสที่ซ้อนกันได้ แต่การคลายการเชื่อมต่ออาจไม่ใช่ตัวเลือกที่ถูกต้องหากการซ้อนการอ้างอิงนั้นให้ค่ากับการออกแบบ
ทางออกหนึ่งที่เป็นไปได้คือ "แบน" การอ้างอิงแบบซ้อนในคลาสคอนโทรลเลอร์
แทนที่จะส่งพารามิเตอร์หลาย ๆ ครั้งผ่านวัตถุที่ซ้อนกันคุณสามารถเก็บรักษาไว้ในตัวควบคุมคลาสที่อ้างอิงถึงวัตถุที่ซ้อนอยู่ทั้งหมด
สิ่งนี้ถูกนำไปใช้อย่างไร (หรือหากเป็นโซลูชันที่ถูกต้อง) ก็ขึ้นอยู่กับการออกแบบระบบในปัจจุบันเช่น:
- คุณสามารถบำรุงรักษาแผนที่ของวัตถุที่ซ้อนกันในคอนโทรลเลอร์ได้หรือไม่โดยไม่ซับซ้อนเกินไป?
- เมื่อคุณส่งพารามิเตอร์ไปยังวัตถุที่ซ้อนกันที่เหมาะสมวัตถุที่ซ้อนกันสามารถรับรู้พารามิเตอร์ได้ทันทีหรือมีฟังก์ชันการทำงานเพิ่มเติมเกิดขึ้นขณะที่ส่งผ่านวัตถุที่ซ้อนกันหรือไม่
- เป็นต้น
นี่เป็นปัญหาที่ฉันพบในรูปแบบการออกแบบ MVC สำหรับไคลเอนต์ GXT ส่วนประกอบ GUI ของเรามีส่วนประกอบ GUI ซ้อนอยู่หลายชั้น เมื่ออัปเดตข้อมูลโมเดลแล้วเราจะส่งผ่านเลเยอร์หลายเลเยอร์จนกว่าจะถึงส่วนประกอบที่เหมาะสม มันสร้างการเชื่อมต่อที่ไม่ต้องการระหว่างคอมโพเนนต์ GUI เพราะถ้าเราต้องการคลาสคอมโพเนนต์ GUI ใหม่เพื่อยอมรับข้อมูลโมเดลเราต้องสร้างวิธีการอัปเดตข้อมูลโมเดลในคอมโพเนนต์ GUI ทั้งหมดที่มีคลาสใหม่
ในการแก้ไขเราได้ทำการบำรุงรักษาในแผนที่ View class ของการอ้างอิงไปยังส่วนประกอบ GUI ที่ซ้อนกันทั้งหมดเพื่อที่ว่าเมื่อใดก็ตามที่ข้อมูลโมเดลได้รับการอัปเดต View สามารถส่งข้อมูลโมเดลที่อัปเดตไปยังคอมโพเนนต์ GUI ที่ต้องการได้โดยตรง . สิ่งนี้ทำงานได้ดีเพราะมีเพียงอินสแตนซ์เดียวของแต่ละคอมโพเนนต์ GUI ฉันเห็นว่ามันใช้งานไม่ได้หากมีหลาย ๆ องค์ประกอบของ GUI บางส่วนทำให้ยากที่จะระบุว่าจำเป็นต้องทำการคัดลอกใด