ขออภัยที่ฉันไม่เห็นด้วยกับคำตอบ 'ใช่คุณสามารถ' ส่วนใหญ่และพูดว่า:
ฉันจะกีดกันชั้นเรียนที่เรียกวิธีการหนึ่งจากที่อื่น
มีปัญหาที่อาจเกิดขึ้นสองสามข้อในการฝึกนี้
1: การวนซ้ำไม่สิ้นสุดในคลาสที่สืบทอด
ดังนั้นคลาสพื้นฐานของคุณจึงเรียก method1 จาก method2 แต่จากนั้นคุณหรือคนอื่นสืบทอดมาจากมันและซ่อน method1 ด้วยวิธีการใหม่ซึ่งเรียก method2
2: กิจกรรมการบันทึก ฯลฯ
เช่นฉันมีวิธีการหนึ่งที่จะเพิ่มเหตุการณ์ '1 เพิ่ม!' ฉันอาจไม่ต้องการวิธี Add10 เพื่อเพิ่มเหตุการณ์นั้นเขียนลงในบันทึกหรืออะไรก็ตามสิบครั้ง
3: เธรดและการหยุดชะงักอื่น ๆ
เช่น InsertComplexData เปิดการเชื่อมต่อฐานข้อมูลเริ่มทำธุรกรรมล็อคตารางจากนั้นเรียกใช้ InsertSimpleData พร้อมเปิดการเชื่อมต่อเริ่มทำธุรกรรมรอให้ปลดล็อคตาราง ...
ฉันแน่ใจว่ามีเหตุผลมากกว่านี้อีกคำตอบหนึ่งที่สัมผัสกับ 'คุณแก้ไข method1 และประหลาดใจที่ method2 เริ่มทำงานต่างกัน'
Generaly หากคุณมีสองวิธีสาธารณะซึ่งใช้รหัสร่วมกันดีกว่าที่จะทำให้ทั้งคู่เรียกใช้วิธีส่วนตัวแทนการเรียกอีกวิธีหนึ่ง
แก้ไข ----
ให้ขยายในกรณีเฉพาะใน OP
เราไม่มีรายละเอียดมากมาย แต่เรารู้ว่า ReverseData นั้นถูกเรียกใช้โดยตัวจัดการเหตุการณ์บางประเภทเช่นเดียวกับวิธีการถ่ายโอนกำหนดการ
ฉันคิดว่าข้อมูลย้อนกลับยังเปลี่ยนสถานะภายในของวัตถุ
ในกรณีนี้ฉันคิดว่าการรักษาความปลอดภัยของเธรดจะมีความสำคัญและด้วยเหตุนี้การคัดค้านครั้งที่สามของฉันในการฝึกจึงถูกนำมาใช้
เพื่อทำให้เธรด ReverseData ปลอดภัยคุณสามารถเพิ่มการล็อกได้ แต่ถ้า ScheduleTransmission ยังต้องปลอดภัยต่อเธรดคุณจะต้องแชร์การล็อกเดียวกัน
วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการย้ายรหัส ReverseData เป็นวิธีส่วนตัวและให้ทั้งสองวิธีการสาธารณะเรียกว่า จากนั้นคุณสามารถวางคำสั่งล็อคในวิธีการสาธารณะและแชร์วัตถุล็อค
เห็นได้ชัดว่าคุณสามารถโต้เถียง "ที่จะไม่เกิดขึ้น!" หรือ "ฉันสามารถโปรแกรมล็อคอีกวิธีหนึ่ง" แต่ประเด็นเกี่ยวกับการฝึกฝนการเขียนโปรแกรมที่ดีคือการจัดโครงสร้างโค้ดของคุณให้ดีตั้งแต่แรก
ในแง่วิชาการฉันจะบอกว่านี่เป็นการละเมิด L อย่างหนัก วิธีการสาธารณะเป็นมากกว่าแค่การเข้าถึงอย่างเปิดเผย พวกเขายังสามารถแก้ไขได้โดยผู้สืบทอด ควรปิดโค้ดของคุณเพื่อแก้ไขซึ่งหมายความว่าคุณต้องคิดเกี่ยวกับงานที่คุณทำทั้งในที่สาธารณะและวิธีการป้องกัน
นี่เป็นอีกสิ่งหนึ่ง: คุณมีโอกาสละเมิด DDD เช่นกัน หากวัตถุของคุณเป็นวัตถุโดเมนวิธีการสาธารณะควรเป็นคำศัพท์โดเมนซึ่งหมายถึงบางสิ่งบางอย่างเพื่อธุรกิจ ในกรณีนี้มันเป็นไปได้ยากมากที่ 'ซื้อไข่หนึ่งโหล' จะเหมือนกับ 'ซื้อ 1 ไข่ 12 ครั้ง' แม้ว่ามันจะเริ่มต้นเอง