Estou apenas começando com o RxJava , a implementação do ReactiveX por Java (também conhecida como Rx e Reactive Extensions ). Algo que realmente me surpreendeu foi o enorme tamanho do RxJava Fluido classe : tem 460 métodos!
Para ser justo:
Existem muitos métodos sobrecarregados, que aumentam significativamente o número total de métodos.
Talvez essa classe deva ser dividida, mas meu conhecimento e entendimento do RxJava são muito limitados. As pessoas que criaram o RxJava são certamente muito inteligentes e, presumivelmente, podem oferecer argumentos válidos para optar por criar o Flowable com tantos métodos.
Por outro lado:
RxJava é a implementação em Java das Extensões Reativas da Microsoft , e que nem sequer tem uma classe Flowable , portanto, este não é o caso de portar cegamente uma classe existente e implementá-la em Java.
[ Atualização: o ponto anterior em itálico está factualmente incorreto: a classe Observable da Microsoft , que possui mais de 400 métodos, foi usada como base para a classe Observable do RxJava , e o Flowable é semelhante ao Observable, mas lida com a contrapressão para grandes volumes de dados. Portanto, a equipe do RxJava estava portando uma classe existente. Este post deveria ter sido desafiando o design original do Observable classe pela Microsoft ao invés de RxJava Fluido classe.]
O RxJava tem pouco mais de 3 anos, portanto, este não é um exemplo de código mal projetado devido à falta de conhecimento sobre os bons princípios de design de classe ( SOLID ) (como foi o caso das versões iniciais do Java).
Para uma classe tão grande quanto a Flowable, seu design parece inerentemente errado, mas talvez não; uma resposta a esta pergunta SE Qual é o limite para o número de métodos de uma classe? sugeriu que a resposta seja " Tenha quantos métodos você precisar ".
Claramente, existem algumas classes que legitimamente precisam de um número razoável de métodos para apoiá-las, independentemente da linguagem, porque elas não se decompõem prontamente em algo menor e possuem um número razoável de características e atributos. Por exemplo: seqüências de caracteres, cores, células da planilha, conjuntos de resultados do banco de dados e solicitações HTTP. Ter talvez algumas dezenas de métodos para as classes representarem essas coisas não parece irracional.
Mas o Flowable realmente precisa de 460 métodos, ou é tão grande que é necessariamente um exemplo de design de classe ruim?
[Para ser claro: esta pergunta refere-se especificamente a de RxJava Fluido classe em vez de objetos Deus em geral.]