สมมติว่าฉันมีวัตถุสองชนิดคือ A และ B ความสัมพันธ์ระหว่างพวกมันมีมาก - ต่อ - กลุ่ม แต่ไม่มีพวกมันเป็นเจ้าของอีกคน
อินสแตนซ์ A และ B ทั้งสองจำเป็นต้องตระหนักถึงการเชื่อมต่อ มันไม่ใช่แค่ทางเดียว
ดังนั้นเราสามารถทำสิ่งนี้:
class A
{
...
private: std::vector<B *> Bs;
}
class B
{
private: std::vector<A *> As;
}
คำถามของฉันคือ:ฉันจะวางฟังก์ชันเพื่อสร้างและทำลายการเชื่อมต่อที่ไหน?
ควรเป็น A :: Attach (B) ซึ่งจะอัพเดท A :: Bs และ B :: เป็นเวกเตอร์หรือไม่
หรือควรเป็น B :: Attach (A) ซึ่งดูสมเหตุสมผลพอ ๆ กัน
ไม่มีความรู้สึกใดเลย ถ้าฉันหยุดทำงานกับรหัสและกลับมาหลังจากผ่านไปหนึ่งสัปดาห์ฉันแน่ใจว่าฉันจะจำไม่ได้ว่าฉันควรทำ A.Attach (B) หรือ B.Attach (A) หรือไม่
บางทีมันควรจะเป็นฟังก์ชั่นแบบนี้:
CreateConnection(A, B);
แต่การสร้างฟังก์ชั่นระดับโลกดูเหมือนจะเป็นสิ่งที่ไม่พึงประสงค์ด้วยเนื่องจากมันเป็นฟังก์ชั่นเฉพาะสำหรับการทำงานกับคลาส A และ B เท่านั้น
คำถามอื่น:หากฉันพบปัญหา / ข้อกำหนดนี้บ่อยฉันจะสามารถแก้ปัญหาทั่วไปได้หรือไม่? บางทีคลาส TwoWayConnection ที่ฉันสามารถหามาจากหรือใช้ภายในคลาสที่แบ่งใช้ความสัมพันธ์ประเภทนี้?
อะไรคือวิธีที่ดีในการจัดการกับสถานการณ์นี้ ... ฉันรู้วิธีจัดการสถานการณ์ "C เป็นเจ้าของ D" แบบตัวต่อตัวได้ค่อนข้างดี แต่สถานการณ์นี้ค่อนข้างหลอกลวง
แก้ไข: เพื่อให้ชัดเจนยิ่งขึ้นคำถามนี้ไม่เกี่ยวข้องกับปัญหาการเป็นเจ้าของ ทั้ง A และ B เป็นเจ้าของโดยวัตถุอื่น Z และ Z ดูแลปัญหาการเป็นเจ้าของทั้งหมด ฉันสนใจเพียงแค่วิธีการสร้าง / ลบลิงก์หลายต่อหลายอันระหว่าง A และ B
Pointer
GestureRecognizer
พอยน์เตอร์เป็นเจ้าของและจัดการโดยคลาส InputManager GestureRecognizers เป็นเจ้าของโดยอินสแตนซ์ของ Widget ซึ่งจะถูกเปิดใช้โดยอินสแตนซ์ของหน้าจอซึ่งเป็นเจ้าของโดยอินสแตนซ์ของแอป พอยน์เตอร์ได้รับมอบหมายให้กับ GestureRecognizers เพื่อให้สามารถป้อนข้อมูลดิบให้กับพวกเขาได้ แต่ GestureRecognizers จำเป็นต้องตระหนักถึงจำนวนพอยน์เตอร์ที่เกี่ยวข้องกับพวกเขาในปัจจุบัน (เพื่อแยกแยะ 1 นิ้วกับ 2 นิ้วท่าทาง ฯลฯ )