Recién estoy comenzando con RxJava , la implementación de ReactiveX en Java (también conocida como Rx y Reactive Extensions ). Algo que realmente me llamó la atención fue el enorme tamaño de la RxJava Fluido clase : tiene 460 métodos!
Para ser justo:
Hay muchos métodos que están sobrecargados, lo que aumenta significativamente el número total de métodos.
Quizás esta clase debería dividirse, pero mi conocimiento y comprensión de RxJava es muy limitado. Las personas que crearon RxJava seguramente son muy inteligentes, y presumiblemente pueden ofrecer argumentos válidos para elegir crear Flowable con tantos métodos.
Por otra parte:
RxJava es la implementación de Java de las Extensiones reactivas de Microsoft , y eso ni siquiera tiene una clase Flowable , por lo que no se trata de portar a ciegas una clase existente e implementarla en Java.
[ Actualización: el punto anterior en cursiva es incorrecto: la clase Observable de Microsoft , que tiene más de 400 métodos, se utilizó como base para la clase Observable de RxJava , y Flowable es similar a Observable pero maneja la contrapresión para grandes volúmenes de datos. Entonces, el equipo de RxJava estaba portando una clase existente. Este post debería haber sido un reto el diseño original de la observable clase por Microsoft en lugar de RxJava de Fluido clase.]
RxJava tiene solo poco más de 3 años, por lo que este no es un ejemplo de código mal diseñado debido a la falta de conocimiento sobre principios de diseño de clase buenos ( SOLIDOS ) (como fue el caso con las primeras versiones de Java).
Para una clase tan grande como Flowable, su diseño parece intrínsecamente incorrecto, pero tal vez no; una respuesta a esta pregunta SE ¿ Cuál es el límite para el número de métodos de una clase? sugirió que la respuesta es " Tenga tantos métodos como necesite ".
Claramente, hay algunas clases que legítimamente necesitan una buena cantidad de métodos para apoyarlas, independientemente del idioma, porque no se dividen fácilmente en nada más pequeño y tienen una buena cantidad de características y atributos. Por ejemplo: cadenas, colores, celdas de hojas de cálculo, conjuntos de resultados de bases de datos y solicitudes HTTP. Tener unas pocas docenas de métodos para que las clases representen esas cosas no parece irrazonable.
¿Pero Flowable realmente necesita métodos 460, o es tan grande que es necesariamente un ejemplo de diseño de mala clase?
[Para que quede claro: esta pregunta se refiere específicamente a la RxJava Fluido clase en lugar de objetos de Dios en general.]