Asla asla Deme"
Mutlaka kötü olduğunu düşünmüyorum, sadece kötü yapar ve kötüye kullanırsanız kötüdür.
Hepimiz Araçlara ve Yardımcı Programlara İhtiyacımız Var
Yeni başlayanlar için hepimiz bazen neredeyse her yerde ve mutlaka sahip olunması gereken bazı kütüphaneler kullanıyoruz. Örneğin, Java dünyasında, Google Guava'da veya bazı Apache Commons'ta ( Apache Commons Lang , Apache Commons Koleksiyonları , vb.).
Yani bunlara açıkça ihtiyaç var.
Zor Kelime, Çoğaltma ve Tanıtıcı Hatalardan Kaçının
Bu konuda düşünüyorsanız hemen hemen bunlardan sadece çok büyük bir demet Util
birisi onları (nispeten) hakkını almak için büyük çaba geçti dışında açıkladığınız sınıflar ve onlar been zaman - test ve ağır başkaları tarafından göz balled.
Bu yüzden, bir Util
sınıf yazmak için kaşıntı hissederken ilk kuralın, Util
sınıfın gerçekten var olmadığını kontrol etmek olduğunu söyleyebilirim .
Bunun için gördüğüm tek karşı-argüman bağımlılıklarınızı sınırlamak istediğiniz zamandır çünkü:
- bağımlılıklarınızın bellek ayak izini sınırlamak istiyorsunuz,
- veya geliştiricilerin kullanmasına izin verilenleri sıkı bir şekilde kontrol etmek istersiniz (obsesif büyük ekiplerde veya belirli bir çerçeve, kesinlikle bir yerde kaçınmak için garip süper berbat sınıfın olmasıyla bilinir).
Ancak bunların her ikisi de, ProGuard veya eşdeğeri kullanılarak lib'in yeniden paketlenmesi veya kendinizin parçalanmasıyla ele alınabilir ( Maven kullanıcıları için, maven-gölge eklentisi bunu yapınızın bir parçası olarak entegre etmek için bazı filtreleme desenleri sunar ).
Dolayısıyla, bir lib'taysa ve kullanım durumunuzla eşleşiyorsa ve hiçbir kıyaslama size bunun aksini söylemiyorsa kullanın. Sizden biraz farklıysa, uzatın (mümkünse) veya uzatın veya son çare olarak yeniden yazın.
Adlandırma Kuralları
Ancak şimdiye kadar bu cevapta onlara Util
senin gibi dedim . Onlara böyle isim verme.
Onlara anlamlı isimler verin. Google Guava'yı ne yapacağınıza dair (çok, çok) iyi bir örnek olarak alın ve com.google.guava
ad alanının aslında sizin kökünüz olduğunu hayal edin util
.
util
En kötü ihtimalle paketinizi arayın , ama sınıfları değil. String
Nesneler ve dize yapılarının manipülasyonu ile ilgileniyorsa , onu arayın Strings
, değil StringUtils
(üzgünüm, Apache Commons Lang - Seni hala seviyorum ve kullanıyorum!). Belirli bir şey yaparsa, belirli bir sınıf adı seçin ( Splitter
veya gibi Joiner
).
Ünite testi
Bu yardımcı programları yazmak için başvurmanız gerekiyorsa, bunları birim olarak test ettiğinizden emin olun. Yardımcı programlarla ilgili iyi olan şey, genellikle belirli girdileri alan ve belirli çıktıları döndüren bağımsız bileşenlerdir. Kavram budur. Bu yüzden onları birim test etmemek için bir mazeret yoktur.
Ayrıca, birim testi, API'larının sözleşmesini tanımlamanıza ve belgelemenize olanak tanır. Testler bozulursa, bir şeyi yanlış bir şekilde değiştirdiniz veya API'nızın sözleşmesini değiştirmeye çalıştığınız (veya orijinal testlerinizin boktan olduğunu öğrenin - tekrar öğrenin ve bir daha yapmayın) .
API Tasarımı
Bu API'lar için alacağınız tasarım kararı muhtemelen sizi uzun süre takip edecektir. Bu nedenle, Splitter
-klon yazmak için saat harcamakla birlikte , soruna nasıl yaklaştığınıza dikkat edin.
Kendinize birkaç soru sorun:
- Fayda yönteminiz bir sınıfı tek başına garanti ediyor mu veya benzer bir yöntem grubunun parçası olması mantıklıysa statik bir yöntem yeterince iyi mi?
- Nesneleri oluşturmak ve API'larınızı daha okunabilir hale getirmek için fabrika yöntemlerine mi ihtiyacınız var ?
- Okunabilirlikten bahsetmişken, bir Akıcı API'ye , oluşturuculara vb. İhtiyacınız var mı?
Bu araçların geniş bir kullanım senaryolarını kapsamasını, sağlam, istikrarlı, iyi belgelenmiş olmasını, en az sürpriz ilkesini takip etmesini ve bağımsız olmasını istersiniz. İdeal olarak, aletlerinizin her bir alt paketi ya da en azından bütün paketiniz kolay yeniden kullanım için bir pakete ihraç edilebilir.
Her zamanki gibi, burada devlerden öğrenin:
Evet, bunların birçoğu koleksiyonlara ve veri yapılarına vurgu yapıyor, ancak bana, doğrudan veya dolaylı olarak araçlarınızın çoğunu nerede ya da ne için uygulayacağınızı söylemeyin.
Util
Sınıflarınızın adlarında kullanmayı bırakın . Sorun çözüldü.