2017-08-05 20 views
5

Konular: https://github.com/JakeWharton/RxRelayRxJava Röle vs Jake Warthon bu kütüphanenin amacını anlamaya çalışıyorum

Temelde: onComplete veya OnError çağrı yeteneği olmadan haricinde bir Konusu. Konular zarar verici bir şekilde durumsaldır: bir onComplete veya onError aldıklarında artık veri taşımak için kullanılamazlar.

Fikrim var, geçerli bir kullanım durumu, ancak yukarıda varolan konuları kullanmanın kolay olduğu anlaşılıyor.

1. konuya değil ileri errors/completions olayları yapın:

`observable.subscribe({ subject.onNext(it) }, { log error/throw exception },{ ... })` 

2.

, konuyu açığa senin yöntem imzası yerine gözlemlenebilir dönmek yapmayın.

fun(): Observable<> { return subject }

Açıkçası burada bir şey eksik ve ben ne olduğunu üzerinde Çok merak değilim!

class MyPublishRelay<I> : Consumer<I> { 

    private val subject: Subject<I> = PublishSubject.create<I>() 

    override fun accept(intent: I) = subject.onNext(intent) 

    fun subscribe(): Disposable = subject.subscribe() 
    fun subscribe(c: Consumer<in I>): Disposable = subject.subscribe(c) 
    //.. OTHER SUBSCRIBE OVERLOADS 
} 

cevap

2

subscribe genellikle, insanlar subscribe(Consumer) aşırı alışması, aşırı yüklenmelere sahiptir ve. Daha sonra nesneleri kullanırlar ve aniden onComplete da çağrılır. RxRelay, subscribe(Consumer) ve subscribe(Observer) arasındaki farkı düşünmeyen kullanıcıyı kendisinden kurtarır.

  1. konuya hataları/tamamlamaları olayları iletmek etmeyin: Nitekim

ama başlayanlar olan deneyimimize dayanarak, genellikle bu konuda sanmıyorum hatta hakkında bilmek göz önünde bulundurulması gereken yöntemler.

  1. , konuyu açığa senin yöntem imzası yerine gözlemlenebilir dönmek yapmayın. Eğer konu haline öğeleri göndermek için bir yol gerekiyorsa

, bu işe yaramaz. Amaç, nesneyi çok noktaya yayın yapmak için bazen başka bir Observable'dan kullanmaktır. Emisyonları Subject aracılığıyla tam olarak kontrol ediyorsanız, onComplete numaralı telefonu aramama ve başka bir şey yapmamaya da izin vermeniz gerekir.

+0

Teşekkürler akarnokd, Bilinmesi gereken bir şey eksik değilim :) # 2 ile ilgili olarak eğer konuyu sarmalayıcı sınıfının içine koyarsanız, bir yöntemi kabul edebilirsiniz (item) {subject.omNext (item)}. Ve Konu özel bir alan kalır – feresr

+0

Bunun tek sebebi olduğuna emin misiniz? Sadece yeni başlayanlardan kaçınmak için yepyeni bir kütüphane oluşturmak bir hata gibi görünüyor. Yani projelerinize aktarıyor – feresr

+0

[Bu] kastediyorsunuz (https://github.com/JakeWharton/RxRelay/issues/30)? İç standartlar çoğunlukla standart Konular ile aynı olduğundan ve terminal olayının kaldırılması, yazdıklarımızla birlikte bizi bırakan önemli bir performans kazancı değildir. – akarnokd

İlgili konular