Ho appena iniziato con RxJava , l'implementazione Java di ReactiveX (noto anche come Rx e Reactive Extensions ). Qualcosa che mi ha colpito è stata la dimensione di massa di di RxJava Flowable classe : ha 460 metodi!
Ad essere onesti:
Esistono molti metodi sovraccaricati, che aumentano 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 scegliere di creare Flowable con così tanti metodi.
D'altro canto:
RxJava è l'implementazione Java delle estensioni reattive di Microsoft e che non ha nemmeno una classe Flowable , quindi questo non è il caso di portare ciecamente una classe esistente e implementarla in Java.
[ Aggiornamento: il punto precedente in corsivo non è corretto: la classe Observable di Microsoft , che ha oltre 400 metodi, è stata utilizzata come base per la classe Observable di RxJava e Flowable è simile a Observable ma gestisce la contropressione per grandi volumi di dati. Quindi il team RxJava stava eseguendo il porting di una classe esistente. Questo post avrebbe dovuto essere sfidando il disegno originale del Observable di classe da parte di Microsoft, piuttosto che di RxJava Fluido di classe.]
RxJava ha solo poco più di 3 anni, quindi questo non è un esempio di codice mal progettato a causa della mancanza di conoscenza dei principi di progettazione di classe ( SOLID ) (come nel caso delle prime versioni di Java).
Per una classe grande come Flowable il suo design sembra intrinsecamente sbagliato, ma forse no; una risposta a questa domanda SE Qual è il limite al numero di metodi di una classe? ha suggerito che la risposta è " Avere tutti i metodi di cui hai bisogno ".
Chiaramente ci sono alcune classi che hanno legittimamente bisogno di un discreto numero di metodi per supportarli indipendentemente dal linguaggio, perché non si scompongono prontamente in qualcosa di più piccolo e hanno un discreto numero di caratteristiche e attributi. Ad esempio: stringhe, colori, celle di fogli di calcolo, set di risultati del database e richieste HTTP. Avere forse qualche dozzina di metodi affinché le classi rappresentino quelle cose non sembra irragionevole.
Ma Flowable ha davvero bisogno di 460 metodi o è così grande che è necessariamente un esempio di design di classe scadente?
[Per essere chiari: questa domanda riguarda specificamente di RxJava Flowable classe piuttosto che oggetti Dio in generale.]