Öncelikle burada yöntem erişiminden bahsettiğimi söyleyerek ve biraz daha az ölçüde, sınıfları üye erişimi değil , finalleri işaretleyerek bunu önceden yazayım .
Eski bilgelik
"yapmamak için iyi bir nedeniniz yoksa özel olarak işaretleyin"
açık kaynak geliştirici kütüphane alanı ve VCS / bağımlılık mgmt hakim önce yazıldığı günlerde mantıklı. Github, Maven vb. sayesinde hiper işbirlikçi oldu. O zamanlar bir kütüphanenin nasıl kullanılabileceğini kısıtlayarak para kazanacaktı. Muhtemelen kariyerimin ilk 8 veya 9 yılını bu "en iyi uygulamaya" kesinlikle bağlı kalarak geçirdim.
Bugün bunun kötü bir tavsiye olduğuna inanıyorum. Bazen özel bir yöntemi veya bir sınıf finalini işaretlemek için makul bir argüman vardır, ancak son derece nadirdir ve o zaman bile muhtemelen hiçbir şey geliştirmez.
Sen hiç:
- Hayal kırıklığına uğramış, miras ve birkaç kod satırı ile düzeltilmiş bir hataya sahip olan bir kütüphane vb. Sahibim.
- Bir kütüphane, yazarlar tarafından hayal edilenden biraz farklı bir kullanım durumu için kullanmak istedi, ancak özel / son yöntemler ve sınıflar nedeniyle bunu yapamadı? Sahibim.
- Hayal kırıklığına uğramış, şaşırmış veya genişletilebilirliğinde aşırı derecede izin verilen bir kütüphane vb. Bende yok.
Bunlar, varsayılan olarak özel işaretleme yöntemleri için duyduğum en büyük üç rasyonelleştirmedir:
Rasyonalizasyon # 1: Güvenli değil ve belirli bir yöntemi geçersiz kılmak için hiçbir neden yok
Yazdığım belirli bir yöntemi geçersiz kılmanın gerekip gerekmediği konusunda kaç kez yanlış olduğumu sayamıyorum. Birkaç popüler açık kaynak kütüphanesinde çalıştıktan sonra, şeyleri özel olarak işaretlemenin gerçek maliyetini zor yoldan öğrendim. Genellikle öngörülemeyen sorunlara veya kullanım durumlarına tek pratik çözümü ortadan kaldırır. Tersine, ben ettik asla API güvenliği ile ilgili nedenlerle yerine özel korumalı bir işaretleme yöntemi mesleki gelişim 16+ yıl içinde pişman. Bir geliştirici bir sınıfı genişletmeyi ve bir yöntemi geçersiz kılmayı seçtiğinde, bilinçli olarak "Ne yaptığımı biliyorum" diyorlar. ve verimlilik için bu yeterli olmalı. dönem. Tehlikeli ise, Javadocs sınıfında / yönteminde not edin, sadece körü körüne kapıyı kapatmayın.
Varsayılan olarak korunan markalama yöntemleri, modern SW geliştirmedeki ana sorunlardan biri için bir azaltmadır: hayal gücünün başarısızlığı.
Rasyonalizasyon # 2: Genel API / Javadoc'ları temiz tutar
Bu daha mantıklı ve hedef kitleye bağlı olarak yapılması gereken doğru şey bile olabilir, ancak API'yi "temiz" tutmanın maliyetinin gerçekte ne olduğunu düşünmeye değer: genişletilebilirlik. Yukarıda belirtilen nedenlerden dolayı, muhtemelen her durumda varsayılan olarak korunan şeyleri işaretlemek daha mantıklıdır.
Rasyonalizasyon # 3: Yazılımım ticari olarak kullanılıyor ve kullanımını kısıtlamam gerekiyor.
Bu da mantıklı, ancak bir tüketici olarak her seferinde daha az kısıtlayıcı olan rakiplerle (önemli bir kalite farkının olmadığı varsayılarak) giderdim.
Asla asla Deme
Asla yöntemleri özel markalama demiyorum. Ben daha iyi bir kural "iyi bir neden olmadığı sürece yöntemleri korumak yapmak" olduğunu söylüyorum.
Bu tavsiye, kütüphaneler veya modüllere ayrılmış daha büyük ölçekli projeler üzerinde çalışanlar için en uygunudur. Daha küçük veya daha fazla monolitik projeler için, zaten tüm kodu kontrol ettiğiniz için çok önemli değildir ve ihtiyacınız olduğunda / gerektiğinde kodunuzun erişim seviyesini değiştirmek kolaydır. O zaman bile yine de aynı tavsiyeyi veririm :-)