Ho appena iniziato con RxJava , l'implementazione di Java di ReactiveX (noto anche come Rx e Estensioni reattive ). Qualcosa che mi ha veramente colpito è stata la dimensione enorme della classe Flowable di RxJava : ha 460 metodi!
Per essere onesti:
-
Esistono molti metodi che sono sovraccarichi, il che riduce significativamente il numero totale di metodi.
-
Forse questa classe dovrebbe essere suddivisa, ma la mia conoscenza e comprensione di RxJava è molto limitata. Le persone che hanno creato RxJava sono sicuramente molto intelligenti e possono presumibilmente offrire argomenti validi per la scelta di creare Flowable con così tanti metodi.
D'altra parte:
-
RxJava è l'implementazione Java di Reactive di Microsoft Estensioni e non ha nemmeno una classe Flowable , quindi non è un caso di porting di una classe esistente e implementazione in Java.
-
[ Aggiornamento: il punto in corsivo precedente è effettivamente errato: la classe Observable di Microsoft, che ha oltre 400 metodi, è stata utilizzata come base per RxJava < La classe strong> Observable e Flowable è simile a Observable ma gestisce la contropressione per grandi volumi di dati. Quindi il team di RxJava stava porting una classe esistente. Questo post avrebbe dovuto sfidare il design originale della classe Observable di Microsoft piuttosto che la Flowable classe di RxJava.
-
RxJava ha solo poco più di 3 anni, quindi questo non è un esempio di codice progettato male per la mancanza di conoscenza del bene ( SOLID ) principi di progettazione della classe (come nel caso delle prime versioni di Java).
Per una classe grande quanto Flowable il suo design sembra intrinsecamente sbagliato, ma forse no; una risposta a questa domanda SE Che cos'è il limite al numero di un metodo di classe? ha suggerito che la risposta è " Hai tutti i metodi di cui hai bisogno ".
Chiaramente ci sono alcune classi che hanno bisogno legittimo di un buon numero di metodi per supportarle indipendentemente dalla lingua, perché non si suddividono facilmente in qualcosa di più piccolo e hanno un buon numero di caratteristiche e attributi. Ad esempio: stringhe, colori, celle del foglio di calcolo, set di risultati del database e richieste HTTP. Avere forse qualche dozzina di metodi per le classi per rappresentare quelle cose non sembra irragionevole.
Ma Flowable ha veramente bisogno di 460 metodi, o è così grande che è necessariamente un esempio di design di classe scadente?
[Per essere chiari: questa domanda riguarda specificamente la classe Flowable di RxJava piuttosto che gli oggetti di Dio in generale.]