Ich fange gerade mit RxJava an , Javas Implementierung von ReactiveX (auch bekannt als Rx und Reactive Extensions ). Was mich wirklich beeindruckt hat, war die enorme Größe der Flowable- Klasse von RxJava : Sie verfügt über 460 Methoden!
Um fair zu sein:
Es gibt viele Methoden, die überladen sind, was die Gesamtzahl der Methoden erheblich beeinträchtigt.
Vielleicht sollte diese Klasse aufgelöst werden, aber meine Kenntnisse und mein Verständnis von RxJava sind sehr begrenzt. Die Leute, die RxJava erstellt haben, sind sicherlich sehr schlau und sie können vermutlich gültige Argumente für die Entscheidung liefern , Flowable mit so vielen Methoden zu erstellen .
Auf der anderen Seite:
RxJava ist die Java-Implementierung von Microsofts Reactive Extensions , für die es nicht einmal eine Flowable- Klasse gibt. Es handelt sich also nicht darum , eine vorhandene Klasse blind zu portieren und in Java zu implementieren.
[ Update: Der vorherige kursive Punkt ist faktisch falsch: Die Observable- Klasse von Microsoft , die über 400 Methoden verfügt, wurde als Basis für die Observable- Klasse von RxJava verwendet , und Flowable ähnelt Observable , verarbeitet jedoch den Gegendruck für große Datenmengen. So das RxJava Team wurden eine vorhandene Klasse zu portieren. Dieser Beitrag hätte eher das ursprüngliche Design der Observable- Klasse von Microsoft als die Flowable-Klasse von RxJava in Frage stellen sollen .]
RxJava ist erst etwas älter als drei Jahre. Dies ist also kein Beispiel dafür, dass Code aufgrund mangelnder Kenntnisse über gute ( SOLID- ) Klassenentwurfsprinzipien falsch entworfen wurde (wie dies bei früheren Versionen von Java der Fall war).
Für eine so große Klasse wie Flowable scheint ihr Design von Natur aus falsch zu sein, aber vielleicht auch nicht. eine Antwort auf diese SE-Frage Was ist die Grenze für die Anzahl der Methoden einer Klasse? schlug vor, dass die Antwort " Haben Sie so viele Methoden, wie Sie brauchen ".
Es ist klar, dass es einige Klassen gibt, die zu Recht eine angemessene Anzahl von Methoden benötigen, um sie unabhängig von der Sprache zu unterstützen, da sie nicht leicht in kleinere Klassen zerfallen und eine angemessene Anzahl von Merkmalen und Attributen aufweisen. Zum Beispiel: Zeichenfolgen, Farben, Tabellenzellen, Datenbankergebnismengen und HTTP-Anforderungen. Vielleicht ein paar Dutzend Methoden für Klassen zu haben, um diese Dinge darzustellen, erscheint nicht unvernünftig.
Aber braucht Flowable wirklich 460 Methoden oder ist es so groß, dass es notwendigerweise ein Beispiel für schlechtes Klassendesign ist?
[Um klar zu sein: Diese Frage bezieht sich speziell auf die Flowable- Klasse von RxJava und nicht auf Objekte von Gott im Allgemeinen.]