SORU
27 Aralık 2010, PAZARTESİ


Guava ve apache eşdeğer kütüphaneler arasında büyük gelişmeler nelerdir?

Şu anda apache derlemeleri, dize araçlarının, vb kullanın. Eğer apache temelleri uygulama değiştirmeliyiz eğer karar vermek lazım.

Önemli kriterlerden geliştiriciler, kullanım kolaylığı. Performans/bellek kullanımı bizim için hala önemli bir sorun değildir. Kalkınma hızı bu noktada anahtar kriterdir.

Guava ile geliştirici hayat çok daha kolay oldu hakkında görüşlerini takdir ediyorum.

CEVAP
28 Aralık 2010, Salı


İlk olarakjavamonkey79Guava ve Apache Commons Google benzer özellikleri paylaşır ederken anlattı, onlar da hem kendi muadili yok işlevleri var. Böylece, tek bir kütüphane kendinizi sınırlandırmak akıllıca olabilir.

Bu varlık, eğer seçme hakkım olsaydı, Guava kullanmak için Apache Commons Guava gerekli işlevi yok (nadir) durumlarda civarında tutmak tercih ederim " dedi. Nedenini açıklamaya girişelim.

Guava daha "modern"

Apache Commons gerçekten olgun bir kütüphane, ama aynı zamanda neredeyse 10 yıl olmuş, ve Java 1.4 hedefler. Guava open sourced in 2007, 5, ve böylece Java hedeflerGuava büyük ölçüde Java 5 özellikleri faydaları:jenerik,varargs,çetelelerveautoboxing.

Guava geliştiriciler göre, jenerik Apache Commons iyileştirilmesi (başlık altında google-collections FAQ*. yerine yeni bir kütüphane oluşturmak için seçtim bir nedeni vardır ^em>"Neden Google Apache Commons Koleksiyonlar yerine geliştirmek için çalıştı olabilir bütün bunları ne zaman inşa etti?").

Ben de onlara katılıyorum: sık sık eleştirilmektedir (maddeleştirme, geriye uyumluluk nedeniyle sınırlı) ise, Java jenerik halaçokGuava gibi uygun bir şekilde kullanıldığında, yararlı. Çıkın olmayan generified koleksiyonları ile çalışmayı tercih ederim!

(Apache Commons unutmayın 3.0,yokhedef) 1.5 Java

Guava çok iyi belgelenmiş tasarlanmıştır

Kodu en iyi uygulamaları ve kullanışlı modeller API daha okunabilir, görülebilir, ölçülebilir, güvenli hale getirmek için dolu, iş parçacığı için güvenli...

Okumak zorundaEtkili Java(kitaba BTW), her yerde kodu: bu desenleri görüyorum

  • fabrika yöntemleri (ImmutableList.copyOf() gibi)
  • builder deseni (ImmutableList.builder(), , *, *4JoinerCharMatcher, Ordering, ...)
  • değişmezliğini tanıdı (değişmez koleksiyonları 8**,..., CharMatcher, Joiner, )
  • uygulama gizleme (Predicates.xXx, ...)
  • miras üzerinden kompozisyon (ForwardXXX koleksiyon) lehine
  • boş denetler
  • numaralama-singleton deseni
  • seri hale getirme vekiller
  • iyi düşünülmüş adlandırma kuralları

Saatlerce avantajları bu tasarım seçenekleri (eğer beni istiyorsan söyle) tarafından getirilen açıklamaya devam edebilirim. Şey, bu kalıpları sadece "gösteri", bir gerçek değer: API bir zevk kullanın, daha kolay öğrenmek (unuttum demek nasıl belgelenmiştir?), daha verimli ve birçok sınıf basit / thread-safe onların değişmezliğini tanıdı nedeniyle.

Bonus olarak, bir kod bakarak çok şey öğrenir :)

Guava tutarlıdır

Kevin Bourrillion (Guava baş geliştiricisi) harika bir iş kütüphane arasında / tutarlılık kalitesi yüksek bir düzeyde muhafaza ediyor. Elbette yalnız değildir, ve great developers bir sürü Guava (şu anda bile çalışan Joshua Bloch, Google!) katkıda bulunmuştur.

Guava arkasındaki temel felsefe ve tasarım seçimleri, kütüphane tutarlı ve geliştiriciler çok iyi (IMO) API tasarım ilkelerine, yapışkan notlar API, geçmişteki hatalarından ders olması uygun değilonlarınhataları olsa da).

Guava güç-ağırlık yüksek bir orana sahiptir

Guava tasarımcılar pek çok özellikleri, en kullanışlı olanlar için API sınırlama eklemek için günaha karşı. Çok zor bir özellik eklendikten sonra, ve Joshua Bloch's motto on API design: "When in doubt, leave it out" takip kaldırmak için olduğunu biliyorlar. Ayrıca, @Beta annotation kullanarak onları 16 ** sağlar.

Tasarım tercihleri, yukarıda çok küçük bir API sağlar. Sadece MapMaker güç bir "" oluşturucu. basit içinde paketlenmiş bakın Diğer iyi (basit?) de olsa örnekler CharMatcher, Splitter Ordering.

Ayrıca çok kolay Guava çeşitli parçaları oluşturmak için. Örneğin, önbellek bir kompleks sonucu function mu? Senin Haritacı için bu işlevi yem ve BİNGO, iş parçacığı için güvenli bir bilgi işlem var/cache göster. Belirli Dizeleri için fonksiyon giriş/göster sınırlamak gerekiyor? Sorun yok, ** 22, kullanarak içine sarın CharMatcher uygunsuz Dizeleri reddetmek için...

Guava aktif gelişme içinde

Apache Commons gelişimi Commons Lang üzerinde çalışmalarını hızlandırmış görünüyor 3.0, Guava açık kaynak ve Google pick up more steam at the moment, iç derslerine daha fazla gibi görünüyor.

Google yoğun olarak üzerinde DAHİLİ olarak kullanır bu yana, her zaman yakında yok olacak sanmıyorum. Ayrıca açık ortak kütüphanelerinden kaynak Google daha kolay kaynak açmak için izin verirdiğero (repackaging onları, Guice gibi does şu anda yerine) bağlı kütüphaneler.

Sonuç

Tüm bu gerekçeler, Guava benim yeni bir proje başlatırken-kütüphane. Ve bu harika kitaplık yaratan müthiş Guava geliştiriciler, Google için çok minnettarım.


PS: ayrıca this other SO question okumak isteyebilirsiniz

PPS: herhangi bir Google hisse senedi (henüz) sahibi değilim

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 8bitdigitaltv

    8bitdigitalt

    31 AĞUSTOS 2011
  • Nickcidious

    Nickcidious

    6 HAZİRAN 2011
  • Slave Boy Films - Fandom from a Galaxy Far Far Away

    Slave Boy Fi

    12 HAZİRAN 2009