Saya perkenalkan ini dengan mengatakan saya berbicara terutama tentang akses metode di sini, dan pada tingkat yang sedikit lebih rendah, menandai kelas final, bukan akses anggota.
Kebijaksanaan lama
"Tandai sebagai pribadi kecuali Anda memiliki alasan kuat untuk tidak
masuk akal di hari-hari ketika ditulis, sebelum open source mendominasi ruang perpustakaan pengembang dan VCS / dependensi mgmt. menjadi sangat kolaboratif berkat Github, Maven, dll. Saat itu ada juga uang yang dihasilkan dengan membatasi cara di mana sebuah perpustakaan dapat digunakan. Saya mungkin menghabiskan 8 atau 9 tahun pertama karir saya secara ketat mengikuti "praktik terbaik" ini.
Hari ini, saya percaya itu saran yang buruk. Kadang-kadang ada argumen yang masuk akal untuk menandai metode pribadi, atau final kelas tetapi sangat jarang, dan bahkan mungkin tidak memperbaiki apa pun.
Pernahkah kamu:
- Pernah kecewa, terkejut atau terluka oleh perpustakaan dll. Yang memiliki bug yang bisa diperbaiki dengan pewarisan dan beberapa baris kode, tetapi karena metode pribadi / final dan kelas terpaksa menunggu patch resmi yang mungkin tidak pernah datang? Saya sudah.
- Ingin menggunakan perpustakaan untuk kasus penggunaan yang sedikit berbeda dari yang dibayangkan oleh penulis tetapi tidak dapat melakukannya karena metode dan kelas pribadi / akhir? Saya sudah.
- Pernah kecewa, terkejut atau terluka oleh perpustakaan dll. Yang terlalu permisif dalam diperpanjang itu? Aku belum.
Ini adalah tiga rasionalisasi terbesar yang saya dengar untuk menandai metode pribadi secara default:
Rasionalisasi # 1: Tidak aman dan tidak ada alasan untuk mengganti metode tertentu
Saya tidak dapat menghitung berapa kali saya salah tentang apakah akan ada kebutuhan untuk mengganti metode tertentu yang saya tulis. Setelah bekerja pada beberapa lib open source populer, saya belajar dengan cara yang sulit biaya sebenarnya menandai hal-hal pribadi. Ini sering menghilangkan satu-satunya solusi praktis untuk masalah yang tidak terduga atau kasus penggunaan. Sebaliknya, saya belum pernah dalam 16+ tahun pengembangan profesional menyesal menandai metode yang dilindungi dan bukan pribadi karena alasan yang terkait dengan keselamatan API. Ketika seorang pengembang memilih untuk memperluas kelas dan mengganti metode, mereka secara sadar mengatakan "Saya tahu apa yang saya lakukan." dan demi produktivitas yang seharusnya cukup. Titik. Jika berbahaya, catat di Javadocs kelas / metode, jangan membanting pintu begitu saja.
Metode penandaan yang dilindungi secara default adalah mitigasi untuk salah satu masalah utama dalam pengembangan SW modern: kegagalan imajinasi.
Rasionalisasi # 2: Itu menjaga API publik / Javadocs bersih
Yang satu ini lebih masuk akal, dan tergantung pada audiens target, itu mungkin bahkan merupakan hal yang tepat untuk dilakukan, tetapi ada baiknya mempertimbangkan berapa biaya untuk menjaga API "bersih" sebenarnya adalah: ekstensibilitas. Untuk alasan yang disebutkan di atas, mungkin lebih masuk akal untuk menandai hal-hal yang dilindungi secara default untuk berjaga-jaga.
Rasionalisasi # 3: Perangkat lunak saya bersifat komersial dan saya perlu membatasi penggunaannya.
Ini masuk akal juga, tetapi sebagai konsumen saya akan pergi dengan pesaing yang kurang ketat (dengan asumsi tidak ada perbedaan kualitas yang signifikan) setiap saat.
Jangan pernah bilang tidak akan pernah
Saya tidak mengatakan tidak pernah menandai metode pribadi. Saya mengatakan aturan praktis yang lebih baik adalah "membuat metode terlindungi kecuali ada alasan bagus untuk tidak".
Saran ini paling cocok untuk mereka yang bekerja di perpustakaan atau proyek skala besar yang telah dipecah menjadi modul. Untuk proyek yang lebih kecil atau lebih monolitik, itu cenderung tidak terlalu berarti karena Anda tetap mengendalikan semua kode dan mudah untuk mengubah tingkat akses kode Anda jika / ketika Anda membutuhkannya. Meski begitu, saya masih akan memberikan saran yang sama :-)