2015-07-11 14 views
20

Dagger 1 üzerinde Dagger 2 avantajları nelerdir?Java bağımlılık enjeksiyonu: Hançer 1 vs Hançer 2, hangisi daha iyi?

Şimdiye kadar buldum (sadece) 2:

  • Hançer 2
  • Hançer 2 android uygulama için bunu kullanırken bir avantaj pek fazla sayılmaz (hızlıdır ProGuard ile kod kandırma kullanmanızı sağlar ama ben büyük bir dezavantajı bulunan aynı zamanda sunucunun çeşit)

için kullanmak eğer önemli bir şey kesindir: en büyük ölçüde rahatsız edici olduğu Hançer 2, içinde) (@Module(overrides = true) modül geçersiz kılmaları olamaz en azından benim için - çok birim testi için seful.

Başka avantajlar/dezavantajlar var mı?

+1

* Ürün veya hizmet önerileri ya da karşılaştırmaları * – Selvin

+0

Benzer bir soru yöneltin: http://stackoverflow.com/questions/31354735/how-to-migrate-missing-inject-from-module -ile tamamlama-yanlış-den-kama-1 için. Bu yazının bir düzenleme olması gerektiğine inanıyorum, –

+4

@Selvin Bu gibi sorular bazen toplum için büyük bir değerdir çünkü "Hangi Hançer DI'yi seçmek ve neden?" Gibi ortak bir soruna dikkat çekerler. Aldığınız kuralı ihlal ettiğim için özür dilerim, fakat "Bazı öznel sorulara izin verilir", "Tüm öznel soruların yapıcı olması bekleniyor." Yorumunuz mevcut olandan daha fazla oy alırsa - Soruyu sileceğim. – Ognyan

cevap

15

bazı avantajları ve dezavantajları https://blog.gouline.net/2015/05/04/dagger-2-even-sharper-less-square/ ve http://google.github.io/dagger/dagger-1-migration.html alınan: Dagger 2'nin

Avantajları:

  • Artık yansıma - her şey (ProGuard hiç yapılandırma ile çalışır) beton çağrılar gibi yapılır
  • Artık çalışma zamanı grafiği oluşturma - istek başına verilenler de dahil olmak üzere performansı artırır
  • İzlenebilir - daha iyi oluşturulmuş kod ve yansıma yok. eadable ve takip edilmesi kolay
  • Modüller kullanıcılar herhangi iyi biçimli kapsamı kullanmasına izin verir Dagger 1 den
  • az yapılandırma gerekecek Hançer tarafından desteklenen tek iki tip vardı sahada ve yapıcı enjeksiyon ilaveten yöntem enjeksiyon destekler Ek açıklama. Hançer 1 sadece tek bir kapsamı destekledi: @Singleton.

ve dezavantajları:

  • inject() yöntem artık püskürtme hedefi ile güçlü tip bir ilişki vardır. Bu, hata ayıklama için iyidir, ancak temel sınıflardan (örneğin, temel faaliyetler, fragmanlar, vb.) Enjekte edilmesine ilişkin yaygın bir uygulamayı zorlaştırır. Bileşen uygulaması, projenin görünmesini yeniden oluşturmayı ve herhangi bir enjeksiyonla ilgili derleme hatasının sınıfın kaybolmasıyla sonuçlanmasını (yani oluşturulmadığını) gerektirir.
  • overrides'u desteklemiyor. Basit test sahtekarlıkları için geçersiz kılan modüller, bu davranışı taklit etmek için modülün bir alt sınıfını oluşturabilir. Geçersiz kılmalar kullanan ve bağımlılık enjeksiyonuna dayanan modüller ayrıştırılmalı, böylece aşırı modüller iki modül arasında bir seçim olarak temsil edilecektir.

DÜZENLEME 2016/11/16: Bu teknik bir avantaj değil, Hançer 1 şimdi (15 Eylül 2016 itibariyle) kullanım dışı kalmıştır ve artık etkin bir geliştirilecektir. Hançer 2'ye göç etmelerini öneriyorlar.

+0

Bilginin kaynağını artık bulamıyorum, ancak D2'nin D1'den% 17 daha hızlı olması gerekiyor .. – Snicolas

+0

@Ognyan bu sorunuzu cevaplıyor mu? eğer öyleyse kabul etmeyi düşünün lütfen! Teşekkür ederim! – snafu109

2

toothpick'a göz atmanızı tavsiye etmem.Bir yazar olarak, önyargılı olduğumdan eminim, ama evet, çoğu durumda hançerlerden daha hızlı kullanıldığında bu, çok daha basittir. Gerçekten de kapsam ağacı, birden çok etkinliğe yayılan kapsamlarda geri dönüşüm örnekleri gibi daha gelişmiş özellikler geliştirmenin çok güçlü bir yoludur.

+0

Yapamaz mıydınız? Ben Kürdan'ı öneriyorum - Hançer 2'yi çok daha fazla kullandım ama bu kütüphane bana henüz bir sorun çıkarmadı. – npace