ให้ฉันนำหน้าด้วยการพูดว่าฉันกำลังพูดเกี่ยวกับวิธีการเข้าถึงที่นี่เป็นหลักและในระดับที่น้อยกว่าเล็กน้อยทำเครื่องหมายชั้นเรียนสุดท้ายไม่ใช่การเข้าถึงสมาชิก
ภูมิปัญญาเก่าแก่
"ทำเครื่องหมายเป็นส่วนตัวเว้นแต่คุณจะมีเหตุผลที่ดีที่จะไม่"
ทำให้รู้สึกในวันที่มันถูกเขียนก่อนที่โอเพนซอร์สครอบงำพื้นที่ห้องสมุดนักพัฒนาและ VCS / การพึ่งพา mgmt กลายเป็นความร่วมมือที่มากเกินไปต้องขอบคุณ Github, Maven และอื่น ๆ จากนั้นก็มีเงินที่ต้องทำโดยการ จำกัด วิธีที่ห้องสมุดสามารถนำไปใช้ประโยชน์ได้ ฉันใช้เวลาในช่วง 8 หรือ 9 ปีแรกของอาชีพการงานของฉันอย่างเคร่งครัด
วันนี้ฉันเชื่อว่ามันจะเป็นคำแนะนำที่ไม่ดี บางครั้งมีการโต้แย้งที่สมเหตุสมผลในการทำเครื่องหมายวิธีการส่วนตัวหรือชั้นสุดท้าย แต่มันหายากเหลือเกินและแม้กระทั่งแล้วก็อาจไม่ปรับปรุงอะไรเลย
คุณเคย:
- เคยผิดหวังผิดหวังหรือได้รับบาดเจ็บจากห้องสมุด ฯลฯ ที่มีข้อผิดพลาดที่สามารถแก้ไขได้ด้วยการสืบทอดและโค้ดไม่กี่บรรทัด แต่เนื่องจากวิธีการส่วนตัว / ขั้นสุดท้ายและชั้นเรียนถูกบังคับให้ต้องรอแพตช์อย่างเป็นทางการที่อาจไม่เคยเกิดขึ้น? ฉันมี.
- ต้องการใช้ห้องสมุดสำหรับกรณีการใช้งานที่แตกต่างจากที่ผู้แต่งจินตนาการไว้เล็กน้อย แต่ไม่สามารถทำได้เนื่องจากวิธีการส่วนตัว / ขั้นสุดท้ายและชั้นเรียน? ฉันมี.
- เคยผิดหวังประหลาดใจหรือบาดเจ็บจากห้องสมุดและอื่น ๆ ที่ได้รับอนุญาตมากเกินไปหรือไม่? ฉันไม่ได้.
นี่เป็นสามข้อแก้ตัวที่ใหญ่ที่สุดที่ฉันเคยได้ยินเกี่ยวกับวิธีการทำเครื่องหมายส่วนตัวโดยค่าเริ่มต้น:
หาเหตุผลเข้าข้างตนเอง # 1: มันไม่ปลอดภัยและไม่มีเหตุผลที่จะแทนที่วิธีการเฉพาะ
ฉันไม่สามารถนับจำนวนครั้งที่ฉันคิดผิดเกี่ยวกับว่าจะมีความจำเป็นต้องแทนที่วิธีการเฉพาะที่ฉันเขียนหรือไม่ เมื่อทำงานกับ libs โอเพนซอร์สยอดนิยมหลายอย่างฉันได้เรียนรู้วิธีที่ยากลำบากในการทำเครื่องหมายค่าใช้จ่ายส่วนตัว มันมักจะกำจัดวิธีแก้ปัญหาในทางปฏิบัติเพียงอย่างเดียวในการแก้ปัญหาที่ไม่เหมาะสมหรือใช้เคส ในทางกลับกันฉันไม่เคยใช้วิธีการพัฒนามืออาชีพมานานกว่า 16 ปีเสียใจที่ทำเครื่องหมายวิธีการป้องกันแทนส่วนตัวด้วยเหตุผลที่เกี่ยวข้องกับความปลอดภัยของ API เมื่อนักพัฒนาเลือกที่จะขยายชั้นเรียนและแทนที่วิธีการพวกเขารู้ตัวว่า "ฉันรู้ว่าฉันกำลังทำอะไรอยู่" และเพื่อประโยชน์ในการผลิตที่ควรจะเพียงพอ ระยะเวลา หากเป็นอันตรายให้บันทึกไว้ในคลาส / วิธี Javadocs ไม่เพียงแค่ปิดประตูอย่างมิดชิด
วิธีการทำเครื่องหมายที่ป้องกันโดยค่าเริ่มต้นคือการลดปัญหาหนึ่งในประเด็นสำคัญในการพัฒนา SW สมัยใหม่: ความล้มเหลวของจินตนาการ
หาเหตุผลเข้าข้างตนเอง # 2: มันช่วยให้สาธารณะ API / Javadocs สะอาด
อันนี้มีเหตุผลมากกว่าและขึ้นอยู่กับกลุ่มเป้าหมายว่ามันอาจจะเป็นสิ่งที่ถูกต้องที่จะทำ แต่มันก็คุ้มค่าที่จะพิจารณาว่าค่าใช้จ่ายในการรักษา API "สะอาด" จริงๆแล้วคือ: ความสามารถในการขยาย ด้วยเหตุผลที่กล่าวมาข้างต้นอาจเหมาะสมกว่าที่จะทำเครื่องหมายสิ่งที่ป้องกันโดยค่าเริ่มต้นในกรณีที่เหมาะสม
หาเหตุผลเข้าข้างตนเอง # 3: ซอฟต์แวร์ของฉันเป็นเชิงพาณิชย์และฉันจำเป็นต้อง จำกัด การใช้งาน
นี่ก็สมเหตุสมผลเช่นกัน แต่ในฐานะผู้บริโภคฉันจะไปกับคู่แข่งที่มีข้อ จำกัด น้อยกว่า (สมมติว่าไม่มีความแตกต่างด้านคุณภาพที่สำคัญอยู่) ทุกครั้ง
ไม่เคยพูดไม่เคย
ฉันไม่ได้บอกว่าไม่เคยทำเครื่องหมายวิธีการส่วนตัว ฉันกำลังบอกว่ากฎง่ายๆคือ "ทำวิธีการป้องกันเว้นแต่จะมีเหตุผลที่ดีที่จะไม่"
คำแนะนำนี้เหมาะที่สุดสำหรับผู้ที่ทำงานในห้องสมุดหรือโครงการขนาดใหญ่ที่แบ่งเป็นโมดูล สำหรับโปรเจกต์ขนาดเล็กหรือขนาดใหญ่มันไม่ได้มีความสำคัญมากนักเนื่องจากคุณสามารถควบคุมโค้ดทั้งหมดได้และมันก็ง่ายที่จะเปลี่ยนระดับการเข้าถึงของโค้ดของคุณถ้า / เมื่อคุณต้องการ ถึงแม้ว่าฉันจะยังคงให้คำแนะนำเดียวกัน :-)