Küçük yazılım kütüphanem diğer kütüphaneleri kullanmaktan kaçınmalı mı?


13

Az önce sadece birkaç sınıf ve yöntem sunan küçük bir Java kütüphanesi yayınladım. Projeyi Maven ile inşa ettiğimden beri, hedeflerime ulaşmak için hemen birkaç üçüncü taraf kütüphanesi kullandım, özellikle:

  • commons-lang3 (bazı genel Java öğeleri için)
  • slf4j-api (günlük kaydı için)
  • commons-io (bir parça dosya için - kelimenin tam anlamıyla bir kez bir kez okumak, sanırım)

Kütüphanemin başkalarının gözünde şişkin görünmesini istemiyorum. Ayak izimi en aza indirmek için bu kütüphanelere olan güvenimi kaldırmaya mı çalışmalıyım? Gelecekte daha fazla kullanmayı düşünürken hangi tür kitaplıklardan kaçınılması gerektiğine dair herhangi bir tavsiye?


1
Sorunuzun somut kısmı sorumlu görünmektedir: projeniz artı beton kütüphaneler artı iyi olup olmadığı. Sorun şu ki, "küçük ... kaçınmalı" genel kısmı ile birlikte heceledi. Şu anda olduğu gibi, bu soru Soru-Cevap formatımıza uygun değil. Yanıtların gerçekler, referanslar veya belirli bir uzmanlık tarafından desteklenmesini bekliyoruz, ancak bu soru muhtemelen tartışma, tartışma, oylama veya genişletilmiş tartışma talep edecektir. Bu sorunun çözülebileceğini düşünüyorsanız, yardım için SSS bölümüne bakın .
gnat

1
@gnat Özür dilerim. Normal bir Stack Overflow kullanıcısı olarak, biraz öznel soruların Programcılar üzerinde kabul edilebilir olduğunu düşünme eğilimindeydim. Bu tür sorunların olduğu bir Stack Exchange sitesi var mı? Bu arada sorumdaki belirsizlikleri kaldıracağım.
Duncan Jones

2
@gnat Bu soru orijinal haliyle bile iyidir.
Thomas Owens

@ Saygılarımızla, saygılarımla, sanmıyorum; orijinal sürüm için hızlı bir şekilde zıt önerileri ile iki cevap anladım, her ikisi de makul bir şekilde haklı: karşılama yoklama oyunu
gnat

1
@gnat Yalnızca iki? Bu iyi. Yayınlanıp oylanmasına izin verin. Karşılıklı gerekçelendirme ve akıl yürütme ile potansiyel olarak doğru olan iki cevap soruyu kötü yapmaz. 3 ya da 4 ya da 5 bile yok. Bu, kitaplık geliştiricilerin uğraşması gereken bir sorun olan iyi biçimlendirilmiş bir soru ve daha sonra yük, iyi cevaplar olmak için cevaplara konuyor .
Thomas Owens

Yanıtlar:


8

Size özel durumunuzu göz önünde bulundurarak cevap veriyorum. Bu kütüphaneleri kullanmanın iyi olduğunu söyleyebilirim. Sadece slf4j-api'nizin uygulama ile birlikte gelmediğinden emin olun. Bununla demek istediğim, uygulama bağımlılığını "test" olarak işaretlemek. ÖRNEĞİN:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.2</version>
    <scope>test</scope>
</dependency>

Bu, SLF4j SSS bölümünde ayrıntılı olarak açıklanmaktadır.

Diğer ikisine gelince, IME, her zaman geriye dönük uyumludurlar. Bu nedenle, 5 yıl sonra kitaplığınızı kullanmam gerekiyorsa, ancak bunların eski bir sürümünü kullanıyorsanız, bağımlılıklarınızı hariç tutabilirim ve kodumuz yine de çalışır. Başka bir deyişle, bu belirli kütüphaneleri kullanarak başkaları için jar-cehennem tanıtmayacaksınız.

Kitaplığınızı maven aracılığıyla kullanırsam, kitaplığınızın şişkin olup olmadığını fark etmeyeceğim. Sadece seninkine güveneceğim ve kullanacağım. Kodunuzun doğru şekilde çalışmasının daha az yer kapladığından daha önemli olduğunu düşünüyorum. Tekerleğin içindeki bir hata ile yeniden icat etmek yerine commons-io kullanmanızı tercih ederim.


Yanıtınız için teşekkür ederim, bence benim almam gereken yaklaşıma genel olarak katılıyoruz. Sadece bir bit düzeltmek için - bir kütüphane projesinde slf4j içermesi gerektiği şekilde slf4j-apisağlanan veya başka bir şekilde ilgili diğer eserler dahil etmektir . Bkz. Slf4j.org/manual.html#projectDep .
Duncan Jones

excludeBağımlılıklarımdaki belirli modüller bir slf4j sürümünde "anlaşamadığında" yapmak zorunda olduğum bazı beyin hasar verici egzersizleri hatırlıyorum . Cevabınızdan, modül tasarımcıları bunu ortaya çıkaracak gibi görünüyor, böyle providedsorunlar olmazdı, değil mi?
gnat

2
@gnat Normalde bu, POM'nizde tercih edilen bir sürümü bildirerek çözülür (en azından Maven'de). Maven, bir eser için tanımlanan "en yakın" sürümü alır ve anında POM geçiş bağımlılıklarından daha ağır basar. Muhtemelen bu bir Maven 2.x sürümü sırasında davranışsal bir değişiklikti.
Duncan Jones

1
Slf4j olarak belirtmek için +1 provided- çok mütevazi.
Gary Rowe

@DuncanJones teşekkürler, muhtemelen o zamanlar bunu özledim. Benim maven sürümü 2.2 veya 2.3, hangisini hatırlayamıyorum (eminim nasıl mvn dependency:analyzehariç bok sürümleri getirildi hatırlıyorum :)
gnat

1

Hayır.

"Şişkinlik" bir efsanedir. Kütüphanenizde ne kadar kod olursa olsun, bu kodlardan hiçbiri hiç kullanılmazsa sayfalandırılmaz - performans veya bellek ayak izi üzerinde hiçbir etkisi olmaz .

Öte yandan, bu ekstra işlevselliğe ihtiyacınız varsa iki seçeneğiniz vardır. Bunu kendiniz yazabilir ve başkalarının daha önce çözdüğü sorunları çözmek için çok fazla zaman ve çaba harcayabilirsiniz veya zaten var olan (ve test edilmiş / hata ayıklanmış / vb.) Çözümü kullanmayı seçebilirsiniz.

Bu bize indirme boyutu ve disk alanı ayak izi bırakıyor ve saçma sayılardan bahsetmediğiniz sürece, 2013'te endişelenmeniz gereken şeyler listesinin en altına yakın olması gereken iki faktör.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.