Skip to content

Refatoração: resolução de Code Smells.#64

Open
JerffersonJunior wants to merge 4 commits intoOtagamerZ:masterfrom
JerffersonJunior:master
Open

Refatoração: resolução de Code Smells.#64
JerffersonJunior wants to merge 4 commits intoOtagamerZ:masterfrom
JerffersonJunior:master

Conversation

@JerffersonJunior
Copy link

Olá, equipe de desenvolvimento da ShiroJBot. Enquanto acadêmicos, estamos realizando um projeto voltado para a manutenção de software, visando identificar e resolver Code Smells de um projeto Open Source. Dessa forma, utilizando ferramentas de identificação de smells e de análise de qualidade de código, como o PMD e o Understand, realizamos as seguintes mudanças como contribuição para o seu projeto:

Este PR visa melhorar a qualidade do código e a manutenibilidade do sistema, abordando problemas de Code Smells identificados nas classes HeroInspectCommand.java, SeeCardCommand.java, Shoukan.java e GuildListener.java. As alterações implementadas seguem boas práticas de programação, como a redução da complexidade ciclomática, eliminação de código duplicado e inutilizado, além da fragmentação de métodos longos em funções menores e mais especializadas. A seguir, detalha-se a finalidade das mudanças em cada classe:

1. Classe: HeroInspectCommand.java

Code Smells relacionados: Long Metod, Comments

  • Mudanças:

    • Criação das funções getDeck, getHero e getGear para recuperar informações de Deck, Hero e Gear;
    • A parte lógica para a configuração das cartas e sua exibição foram extraídas nos métodos buildGearEmbed, buildTagsAndAttributes, buildGearAffixes e createMessageWithEmbed.
  • Melhorias:

    • Aspecto de qualidade da estrutura: diminuição da complexidade ciclomática da classe (passou de 22 para 10);
    • Fragmentação da função "Execute" em métodos menores com responsabilidades específicas, em vista de melhorar a legibilidade e manutenibilidade;
    • Adição de comentários para melhorar o entendimento da execução de cada bloco do código, auxiliando a compreensão de funções mais específicas do domínio.

2. Classe: SeeCardCommand.java

Code Smells relacionados: Long Metod, Comments, Dead Code

  • Mudanças:

    • Criação das funções getKawaipon e getCard para recuperar as informações de Kawaipon e Card;
    • A parte lógica para a configuração das cartas e sua seleção com base nos seus atributos foram extraídas nos métodos createEmbed, processNormalOrChromeCard, addSenshiInfo processShoukanCard;
    • Os métodos handleDrawable, addSenshiDetails, addEvogearDetails, addFieldDetails, addTags foram implementadas para lidar com as imagens e detalhes adicionais das cartas.
    • Como o pacote com.kuuhaku.util.* não estava sendo utilizado por completo, identificamos os pacotes que realmente estavam sendo utilizados, como a Utils, ImageFilters, Graph, IO e Bit32, adicionando-os à importação.
  • Melhorias:

    • Aspecto de qualidade da estrutura: diminuição da complexidade ciclomática da classe (passou de 27 para 10);
    • Adição de comentários após a extração dos métodos da função “execute”, visando facilitar a compreensão do fluxo de execução, como por exemplo, os caminhos dentro do switch case, e o que cada bloco de código faz.
    • Remoção de código inutilizado ao importar somente os pacotes que estão sendo utilizados efetivamente.

3. Classe: Shoukan.java

Code Smells relacionados: Duplicate Code

  • Mudanças:

    • Criação da função handlePendingSelection para executar a validação e enviar as mensagens, substituindo os trechos de códigos repetitivos que verificavam o valor de curr.selectionPending().
    • Criação da função sendFileResponse, responsável por validar se o hook não é nulo, e configurar e enviar as mensagens para o usuário, substituindo os trechos de códigos repetitivos que eram responsáveis por enviar a mensagem de retorno para o usuário contendo um arquivo de imagem.
  • Melhorias:

    • Remoção de todos os blocos de códigos repetitivos, inserindo a função criada no lugar;
    • Facilita as futuras manutenções e adições de outras validações, uma vez que a parte lógica está concentrada em outra função especializada.

4. Classe: GuildListener.java

Code Smells relacionados: Dead Code

  • Mudanças:

    • Os pacotes .model.common., .model.persistent.guild., .model.persistent.user., .model.records., .util.* não estavam sendo utilizados por completo, as mudanças consistiram em identificar somente os pacotes necessários, adicionando-os à importação.
  • Melhorias:

    • Remoção de código inutilizado ao importar somente os pacotes que estão sendo utilizados efetivamente.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants