อะไรคือวิธีที่ดีที่สุดในการใช้การลบออบเจ็กต์ผู้ใช้ซึ่งมีผู้ดูออบเจ็กต์หลายคน

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

มีปัญหานิดหน่อยตามที่เห็นครับ หากสมาชิกยกเลิกการลบหลังจากที่สมาชิกรายอื่นได้อนุมัติการลบแล้ว ฉันต้องสั่งให้สมาชิกเหล่านั้นยกเลิกการลบ

มีรูปแบบที่ดีในการนำสถานการณ์ทั่วไปประเภทนี้ไปใช้หรือไม่


person Rhubarb    schedule 20.02.2010    source แหล่งที่มา


คำตอบ (2)


หากวัตถุจะถูกลบออกจาก มุมมองทั้งหมด หรือไม่มีมุมมองเลย

  1. ถามสมาชิกทุกคนว่าสามารถลบรายการนั้นได้หรือไม่ ถ้าใช่:
  2. ออกคำสั่ง "ลบรายการ" เพื่อลบวัตถุออกจากแหล่งที่มา ทำการลบแบบนุ่มนวล หรืออะไรก็ได้ที่คุณต้องการ
  3. อัปเดตแต่ละมุมมอง นี่จะเป็นส่วนของผู้สังเกตการณ์ ฟังการเรียก "วัตถุที่ถูกลบ" และดำเนินการตามความเหมาะสม เช่น การลบวัตถุที่ถูกลบออกจากแต่ละมุมมองด้วยตนเอง

หากคุณต้องการให้ผู้ใช้สามารถ ลบวัตถุออกจากมุมมองของตนเองได้เสมอ:

  1. ขั้นตอนที่ 2 จากด้านบน นอกเหนือจากนั้นจะถูกลบออกสำหรับ 1) ผู้ใช้เท่านั้น หรือ 2) ผู้ใช้นั้น ในมุมมองนั้น
  2. ขั้นตอนที่ 1. จากด้านบน และดำเนินการต่อ.. (อาจข้ามไป ขึ้นอยู่กับว่าต้องการให้มุมมองสอดคล้องกันมากน้อยเพียงใด)
person chelmertz    schedule 20.02.2010

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

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

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

ดังนั้น หากนี่คือระบบของฉัน ฉันจะพยายามหาวิธีที่จะทำให้การเปลี่ยนแปลงโมเดลสามารถยกเลิกได้ ก่อน เท่านั้นที่จะนำไปใช้กับโมเดล แทนที่จะพยายามนำการเปลี่ยนแปลงไปใช้กับมุมมองอื่นผ่านโมเดลและ จากนั้นพยายามย้อนกลับการเปลี่ยนแปลงเหล่านั้นในภายหลัง

person Joe Carnahan    schedule 21.02.2010