เชื่อมโยงระหว่างเด็กกับผู้ปกครอง - ความคิดที่ไม่ดี?


15

ฉันมีสถานการณ์ที่พ่อแม่ของฉันรู้ว่ามันเป็นลูก (duh) แต่ฉันต้องการให้เด็กสามารถอ้างอิงผู้ปกครองได้ เหตุผลสำหรับเรื่องนี้คือฉันต้องการให้เด็กมีความสามารถในการกำหนดตัวเองว่าสำคัญที่สุดหรือสำคัญที่สุดเมื่อรู้สึกเช่นนั้น เมื่อเด็กทำสิ่งนี้มันจะย้ายไปที่ด้านบนหรือด้านล่างของลูกของผู้ปกครอง

ในอดีตที่ผ่านมาฉันเคยใช้คุณสมบัติ WeakReference กับเด็กเพื่ออ้างอิงย้อนกลับทีโอทีพ่อแม่ แต่ฉันรู้สึกว่ามันเพิ่มค่าใช้จ่ายที่น่ารำคาญ แต่บางทีมันอาจเป็นวิธีที่ดีที่สุดที่จะทำ

นี่เป็นความคิดที่ไม่ดีใช่ไหม คุณจะใช้ความสามารถนี้แตกต่างกันอย่างไร

อัปเดต 1: การเพิ่มบริบทเพิ่มเติม นี่คือระบบการแสดงผลดังนั้นคอนเทนเนอร์พาเรนต์คือรายการของ windows ที่จัดกลุ่มเข้าด้วยกัน รายการย่อย (หน้าต่าง) ที่ระบุว่า "ฉันสำคัญที่สุด!" ต้องการแสดงผลโดยทั่วไปที่ด้านบนของหน้าต่างที่เหลือ

พาเรนต์เป็นเพียงคอนเทนเนอร์โลจิคัลเพื่อจัดกลุ่มเด็กเหล่านี้เข้าด้วยกัน ฉันสามารถดูว่าการเพิ่มกิจกรรมเพื่อส่งสัญญาณคำขอให้อยู่ด้านบนเป็นความคิดที่ดี แต่การนำไปปฏิบัติ (สิ่งที่เด็กต้องการทำกับผู้ปกครอง) ทำไมคุณไม่ต้องการให้มีการเชื่อมโยงกับผู้ปกครอง? รายการที่เชื่อมโยงเป็นทวีคูณทำเช่นนี้เพื่อให้ผู้คนสามารถท่องไปและกลับจากบางสิ่งได้


3
WeakReferenceคุณไม่จำเป็นต้องมี ตัวรวบรวมขยะ. net สามารถจัดการกับรอบได้ หากเด็กไม่ได้ใช้งานอีกต่อไป (ผู้ปกครองไม่ได้ชี้ไปที่มัน) เด็กนั้นจะถูกรวบรวมแม้จะมีการอ้างอิงไปยังผู้ปกครอง
dbkk

จะเกิดอะไรขึ้นถ้าเด็ก 2 คนคิดว่าพวกเขาต้องการเป็นเด็กที่สำคัญที่สุด?
btilly

@btilly เด็กที่สำคัญที่สุดจริง ๆ แค่เรียงใหม่ไปที่ด้านบนของสแต็คในรายการลูกของผู้ปกครอง ดังนั้นใครก็ตามที่ทำมันจะมีความสำคัญมากที่สุด ในสถานการณ์ของฉันคุณจะไม่มีความขัดแย้งที่สำคัญที่สุด
Thraka

คำตอบ:


18

นี่เป็นความคิดที่ไม่ดีใช่ไหม

บ่อยครั้ง

  • มันแบ่ง encapsulation ของผู้ปกครอง
  • มันเพิ่มการแต่งงานกันทั้งคู่
  • มันทำหน้าที่เป็นจุดฝ่าวงล้อมสำหรับเด็กที่จะได้รับในส่วนที่เหลือของระบบการเพิ่มการมีเพศสัมพันธ์กับสิ่งที่คลุมเครือใกล้มัน (เพราะคนจะใช้ในทางที่ผิดที่อ้างอิง)
  • มัน จำกัด การออกแบบของคุณหากคุณต้องการเด็กที่ไม่มีพ่อแม่

ทำอย่างไรให้ดีขึ้น? เด็กไม่ควรรู้หรือสนใจว่ามันเป็นของสะสม แทนที่จะเห็นว่าตัวเองมีความสำคัญมันควรจะเป็นสัญญาณว่าเหตุการณ์บางอย่างที่รู้เกี่ยวกับเหตุการณ์นั้นเกิดขึ้นดังนั้นคนที่ห่วงใย (ผู้ปกครอง) สามารถเพิ่มลำดับความสำคัญของมัน (หรืออะไรก็ตามที่เป็นกฎสำหรับบริบทที่เด็กอาศัยอยู่) ฉันไม่ได้ตื่นเต้นกับสิ่งนั้นและอาจต้องการแยกความกังวลระหว่างแบบจำลองของเด็กกับพฤติกรรมที่สำคัญ แต่ก็ไม่สามารถอธิบายรายละเอียดเพิ่มเติมได้หากไม่มีบริบทเพิ่มเติม

[แก้ไข:]

ใช่ระบบการเรนเดอร์เป็นกรณีหนึ่งที่ผู้ปกครองเป็นเจ้าของ ... เอาล่ะฉันไม่อยากพูดว่าเหมาะสม แต่เป็นกรณีหนึ่งที่มันได้ทำไปแล้วและไม่ใช่จุดสิ้นสุดของโลก สำหรับการให้ความสำคัญกับการควบคุมฉันยังคงชอบการออกแบบที่ตัวจัดการอินพุต (หรืออะไรก็ตาม) เดินบนต้นไม้และรู้ว่าคอลเล็กชันใดที่จะเรียงลำดับใหม่มากกว่าที่จะหาเด็กโดยเรียกสิ่งที่มันรู้ว่าจะไปกับพ่อแม่


1
นี่เป็นคำตอบที่ดีและคุณควรพิจารณาประเด็นทั้งหมดที่กล่าวมาและดูว่าปัญหาเหล่านี้สามารถนำไปใช้กับปัญหาของคุณได้หรือไม่ ต้องบอกว่าถึงแม้ว่าฉันไม่คิดว่ามันจะเป็นจุดสิ้นสุดของโลกถ้าคุณเริ่มต้นด้วยการอ้างอิงเป็นการใช้งานง่ายและ refactor มันออกเมื่อ / หากสิ่งที่ได้รับจากมือ
rperetti

คำตอบนั้นถูกต้อง แต่หากการเชื่อมโยงเด็กกับผู้ปกครองเป็นความคิดที่ไม่ดีการเขียนโปรแกรมเชิงวัตถุจะไม่เกี่ยวข้องกับวัตถุในชีวิตจริงอีกต่อไป ไม่มีวิธีที่จะทำให้สิ่งนี้เป็นสิ่งที่ดีหรือไม่?
Manoj R

ขอบคุณสำหรับคำตอบนี้ ฉันได้เพิ่มบริบทเพิ่มเติมในคำถามเดิมของฉัน
Thraka

1
@ManojR - การเขียนโปรแกรมเชิงวัตถุไม่เคยเกี่ยวข้องกับวัตถุในชีวิตจริง
Telastyn

การแก้ไขของคุณทำให้ฉันคิดถึง VisualTreeHelper ใน WPF \ Silverlight สิ่งนี้ทำให้คุณสามารถสอบถามเกี่ยวกับความสัมพันธ์ของการควบคุมปัจจุบันได้กับส่วนที่เหลือของการควบคุมระบบ UI ฉันเดาว่าฉันสามารถใช้สิ่งนี้ได้เพราะฉันมีตัวควบคุมรูทที่จะโฮสต์ทุกอย่างอื่น ขอบคุณ !!
Thraka

0

การประหารชีวิตมาถึงจุดที่เด็กตัดสินใจว่ามันสำคัญที่สุดหรือไม่? มันไปถึงที่นั่นผ่านทางพ่อแม่เหรอ? ถ้าใช่คุณสามารถส่งการอ้างอิงไปยังผู้ปกครองไปยังวิธีการนั้น

เช่น. ถ้าโหนดทั้งหมดมีวิธีการปรับปรุง () บางอย่างที่ทำสิ่งที่ชอบ

void update() {
    doSomething()
    for(Node n:childs){
        //do something
        n.update();
    }
}

คุณสามารถเปลี่ยนเป็น

void update(Node parent) {
    doSomething(parent)
    for(Node n:childs){
        //do something
        n.update(this);
    }
}

ใช่นี่เป็นวิธีที่ยอดเยี่ยมที่จะทำ อย่างไรก็ตามในสถานการณ์ของฉันอาจเป็นไปได้ว่ารหัสลูกค้าลอจิกไม่ได้เริ่มต้นโดยการวนซ้ำของผู้ปกครอง
Thraka

0

ฉันไม่คิดว่ามันเป็นความคิดที่ไม่ดี คุณสามารถแก้ปัญหานี้ได้โดยการเพิ่มมูลค่าการเรียงลำดับให้กับเด็กแต่ละคน ฉันนึกภาพบางอย่างเช่น "z-index" ที่ใช้แสดงวัตถุบนหรือหลังกันในหน้าเว็บ

ฉันไม่แน่ใจว่าคุณจะเขียนโค้ดแบบนี้ได้อย่างไร แต่แนวคิดฟังดูเป็นไปได้


ด้วยวิธีนี้ปัญหายังคงมีอยู่ สิ่งนี้จะแทนที่แนวคิดการสั่งซื้อในอาร์เรย์ด้วย z-index เท่านั้น ฉันยังต้องมีระบบการสื่อสารจากเด็กถึงผู้ปกครอง ขอบคุณแม้ว่า :)
Thraka
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.