ควรเลิกเมื่อใดและเมื่อใดควรลบใน Java


11

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

คำตอบ:


18

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

อย่างไรก็ตามหาก API เป็นสาธารณะเพียงแค่ลบวิธีการอาจทำให้รหัสที่ใช้ในการทำงานกับไลบรารีรุ่นเก่าของคุณหยุดทำงาน นั่นคือสิ่งที่ได้รับยุ่ง แนวทางต่อไปนี้เป็นแนวทางบางประการ:

  • API ภายใน: ลบออกมากกว่าคัดค้าน หากลูกค้ารายใดใช้คลาสหรือวิธีการภายในมันเป็นความผิดพลาดของพวกเขาหากเครื่องมือแบ่ง
  • API ภายนอก: เลิกใช้ก่อนนำออกในภายหลัง การคัดค้านเป็นธงที่บางสิ่งจะถูกลบในภายหลัง ต่อมาขึ้นอยู่กับสิ่งที่คุณเชื่อว่ามีเหตุผล อย่างน้อยที่สุดให้เวอร์ชัน 2-3 ก่อนที่จะลบรหัสที่เลิกใช้จริง

6

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

ทำสิ่งนี้ให้เพียงพอและคุณจะรู้สึกว่าต้องใช้เวลานานแค่ไหนในการกำจัดชั้นเรียนหรือวิธีการในโครงการของคุณ


1
+1 แต่ไม่ใช่ปฏิทินของคุณบางทีปฏิทินการชำระหนี้ทางเทคนิคของทีมจะเหมาะสมกว่าไหม
Gary Rowe

5

IMHO หากคุณมั่นใจได้ว่าไม่มีใครใช้งานและไม่เป็นไรเพียงลบออก (สิ่งนี้อาจมีความยุ่งยากในการปรากฏตัวหรือส่วนประกอบภายนอกเช่นมาโครความเร็ว - IDEs ที่ทันสมัยเช่น IntelliJ สามารถค้นหาการอ้างอิงในเช่น JSP แต่ไม่ผ่านการสะท้อนกลับหรือในความเร็ว)

หากมีทางเลือกที่ดีกว่า แต่เก่ายังคงใช้ในหลายสถานที่และคุณไม่มีเวลาในการสร้างรหัสลูกค้าใหม่ทั้งหมดก็เพียงพอที่จะ @deprecate คลาส / วิธีที่ล้าสมัย (มีความคิดเห็นที่เพียงพอเกี่ยวกับ ทางเลือกที่โปรดปราน)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.