Meu código tem uma classe com muitas linhas. O que faço?

Qual o tamanho máximo recomendado para um arquivo .java, em linhas?
Tenho este arquivo que tem uma classe que trata de pedidos e ele já tem 320 linhas mas tem potencial para atingir 700 ou talvez 1000 linhas. É um Gui e gostaria da opnião do pessoal do Guj.
Quais as minhas opções e tem algo de errado o arquivo chegar a 700 linhas?

Atenciosamente,
Ronaldo

É muito complicado responder isso, a quantidade de linhas de uma classe geralmente é reflexo da quantidade de operações e responsabilidades que ela tem.

Quando se fala em número de linhas, no Java geralmente só se costuma ater ao número de linhas dos métodos, geralmente se um método tem mais de 20~30 linhas então provavelmente a lógica dele deveria ser segregada em mais métodos com menos códigos cada um.

Agora se sua tela com 700 linhas está parecendo muito grande, então talvez você possa segregar cada área da sua tela em classes menores, cada uma sendo um painel de uma área específica de sua tela, mas pra fazer isso é importante conhecer bem os componentes container e os gerenciadores de layout, senão seu código pode virar uma bagunça.

1 curtida

Muito obrigado, Staroski. Foi muito claro e trouxe luz sobre minhas dúvidas.
Realmente, essa tela é o eixo central de todo sistema porque faz os pedidos de cliente e controla o estoque dando baixa em produtos.
De fato, eu gostaria de dividir um pouco este arquivo mas, infelizmente, não possuo o conhecimento necessário. Talvez consiga encerrar o trabalho dessa classe logo, o mais difícil já foi feito.
Novamente, agradeço muito,
Ronaldo

1 curtida

É uma questão de estudar os componentes e gerenciadores de layout e nesse aspecto tem bastante documentação na própria API do Java e também no The Java Tutorials .

Trabalhei com sistemas desktop em Java por uns 10 anos, geralmente eu criava um classe estendendo JFrame para ser a janela principal do sistema, configurava o contentPane dele com um CardLayout e todas as outras telas do sistema estendiam JPanel, a medida que no menu da janela principal eu mandava abrir uma tela, eu mandava o CardLayout apresentar o JPanel desejado.

Algo mais ou menos assim:

Já toda a questão da lógica do sistema eu separava em camadas distintas, eu tinha uma classe singleton que representava o meu sistema, vamos chamar ela de MeuSistema;

  • MeuSistema tinha o método de login e um método para obter uma classe controladora para cada “módulo” do sistema, tinha o ControleClientes, ControleProduto e ControlePedidos;
  • Cada controle desses era uma interface que estendia uma interface genérica chamada Controle, que tinha os seguintes métodos:
    novo, editar, salvar, cancelar, excluir, listar, selecionar, selecionado.
  • As implementações dessas interfaces de controle é quem manipulavam as classes modelo que eram Cliente, Produto e Pedido;
  • As telas só chamavam os métodos das interfaces de controle e os getters/setters das classes modelo.

É mais ou menos assim que quqluer sistema MVC funciona, infelizmente cada autor implementa e explica do seu jeito e muitas vezes fica difícil entender a abordagem utilizada.

Mas a ideia central é de que as telas não devem implementar nenhuma lógica ou inteligência, isso é responsabilidade das classes de controle.
As telas devem servir apenas para apresentar as informações e ler as informações digitadas pelo usuário do sistema.

@anyblueangel3, apenas complementando essa aula do @staroski rs vou compartilhar o link do site refactoring guru lá você vai encontrar alguns design patterns e os problemas que eles podem solucionar no seu código.
Acho que isso vai ajudar você nas abordagens desses problemas, espero ter ajudado.