Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[Codecon summit ] Minha aplicação virou um monstrinho e agora ?

[Codecon summit ] Minha aplicação virou um monstrinho e agora ?

More Decks by Kamila de fatima santos oliveira

Other Decks in Programming

Transcript

  1. Minha aplicação virou um monstrinho e agora? Kamila Santos CONHEÇA

    AS TÉCNICAS DE REFATORAÇÃO MAIS COMUNS E QUAIS PROBLEMAS ELAS RESOLVEM
  2. Kamila santos TECH LEAD @ZUPINNOVATION MICROSOFT MVP BOOK CO-AUTHOR, INSTRUCTOR

    CONTENT CREATOR @KAMILA_CODE CO-ORGANIZER @WOMAKERSCODE, @PERIFACODE AND @DEVSJAVAGIRL
  3. O que é refatoração ? Podemos definir refatoração como uma

    modificação feita na estrutura interna de um software para deixá-lo mais simples de compreender e menos custoso para alterar, sem que seu comportamento seja modificado.
  4. Porque devemos refatorar ? Refatoração melhora o design do software

    Refatoração deixa o software mais simples de entender Refatoração ajuda na localização de bugs Refatoração nos ajuda a desenvolver mais rapidamente
  5. Quais são as desvantagens de refatorar ? Maior tempo para

    entregar features Aumenta a chance de grandes conflitos de merge Grande parte dos testes precisam ser reescritos
  6. Code smells são indicações de problemas ou deficiências no código-

    fonte de um programa de computador. Esses cheiros podem ser sinais de más práticas de programação, design inadequado ou possíveis bugs.
  7. Code smells Quando identificados, os code smells podem ser considerados

    como um convite para investigar mais a fundo o código e fazer melhorias.
  8. Extrair função é usada quando um trecho de código em

    um método ou função pode ser agrupado em uma função separada. Isso é feito para melhorar a legibilidade, reutilização e manutenção do código.
  9. Extract Function Essa função encapsula a lógica contida no trecho

    de código original e pode ser chamada em outros lugares, evitando a duplicação de código.
  10. Extrair variável é usada quando você tem uma expressão complexa

    em um trecho de código que pode ser extraída para uma variável com um nome descritivo. Essa técnica ajuda a melhorar a legibilidade, compreensão e manutenção do código.
  11. Extract Variable você identifica uma expressão que seja difícil de

    entender ou que seja usada várias vezes no código. Em seguida, você a extrai para uma variável separada e atribui um nome significativo a essa variável.
  12. Encapsulate Variable é usada para promover o encapsulamento de uma

    variável, tornando-a privada e fornecendo métodos de acesso (getters e setters) para manipulá-la. Essa técnica ajuda a melhorar a encapsulação, controle e consistência do acesso aos dados.
  13. Encapsulate Variable você identifica uma variável que está sendo acessada

    diretamente de fora da classe e a torna privada. Em seguida, você cria métodos de acesso (getters) e possivelmente métodos de modificação (setters) para interagir com essa variável.
  14. Introduce Parameter Object é usada quando um conjunto de parâmetros

    relacionados está sendo passado repetidamente para um método ou função. Essa técnica envolve a criação de um novo objeto que encapsula esses parâmetros relacionados, simplificando a chamada do método e melhorando a legibilidade do código.
  15. Introduce Parameter Object você identifica um conjunto de parâmetros que

    são frequentemente passados juntos e os agrupa em um objeto. Esse novo objeto é então passado como um único parâmetro para o método ou função relevante.
  16. Split Phase é usada quando um método ou função executa

    duas ou mais fases distintas ou diferentes tipos de tarefas. Essa técnica envolve a separação dessas fases em métodos ou funções separados, para melhorar a legibilidade, modularidade e facilidade de manutenção do código.
  17. Split Phase você identifica as diferentes fases ou tipos de

    tarefas que estão sendo executadas em um único método ou função. Em seguida, você extrai cada fase para um método ou função separados, permitindo que cada um seja mais focado e específico em sua responsabilidade.
  18. Extract class é usada quando uma classe contém responsabilidades ou

    funcionalidades que podem ser melhor organizadas em uma nova classe separada. Essa técnica envolve a criação de uma nova classe e a transferência de atributos e métodos relacionados para essa nova classe.
  19. Extract class você identifica um conjunto de atributos e métodos

    dentro de uma classe existente que estão relacionados a uma responsabilidade ou funcionalidade específica. Em seguida, você extrai esses atributos e métodos para uma nova classe, tornando-os mais coesos e facilitando a manutenção do código.
  20. Remove Middle Man é usada quando uma classe atua como

    um intermediário desnecessário entre outras classes. Essa técnica envolve a eliminação do intermediário, permitindo que as chamadas de método sejam feitas diretamente entre as classes relevantes.
  21. Remove Middle Man você identifica uma classe que está atuando

    como um intermediário, simplesmente repassando chamadas de método para outra classe sem adicionar qualquer valor ou lógica significativa. Em seguida, você direciona as chamadas de método diretamente para a classe que estava sendo intermediada.
  22. Hide delegate é usada quando uma classe está fornecendo acesso

    direto a um objeto delegado e esse acesso direto está sendo utilizado em excesso ou violando o princípio de encapsulamento. Essa técnica envolve ocultar o objeto delegado por trás de métodos da classe que o encapsulam, limitando o acesso direto ao delegado.
  23. Hide delegate você identifica os pontos em que a classe

    está expondo o objeto delegado e fornecendo acesso direto a ele. Em seguida, você oculta o delegado por trás de métodos da classe que agem como intermediários, permitindo que a classe controle como o delegado é acessado e evitando o acesso direto descontrolado.
  24. Move function é usada quando uma função ou método está

    localizado em uma classe que não é a mais apropriada para abrigá-lo. Essa técnica envolve mover a função para outra classe que possui uma responsabilidade mais adequada ou onde a função possa ser mais facilmente reutilizada.
  25. Move function você identifica uma função ou método que está

    em uma classe onde não se encaixa bem em termos de responsabilidade ou coesão. Em seguida, você move essa função para uma classe mais apropriada, garantindo que a funcionalidade seja colocada no contexto correto.
  26. Remove Dead Code é usada quando há trechos de código

    que não são mais utilizados e não têm impacto no funcionamento do programa. Essa técnica envolve a remoção desses trechos de código desnecessários, simplificando e tornando o código mais limpo e legível.
  27. Remove Dead Code você identifica partes do código que não

    são mais acessadas ou executadas devido a alterações em requisitos, lógica ou fluxo de execução. Essas partes podem incluir variáveis não utilizadas, métodos ou funções não chamados, blocos condicionais que nunca são verdadeiros ou falsos, entre outros.
  28. Change Value to Reference é usada quando você tem um

    objeto que é usado como um valor, mas você percebe que é necessário tratá-lo como um objeto com identidade própria. Essa técnica envolve substituir a representação de valor por uma representação de referência, permitindo que múltiplos objetos se refiram à mesma instância.
  29. Change Value to Reference você identifica um objeto que deve

    ser tratado como uma entidade única e não como um valor. Em seguida, você cria uma nova classe para representar esse objeto, onde a igualdade é baseada na identidade em vez do conteúdo do objeto. Em seguida, substitui as ocorrências do objeto valor por referências à nova classe.
  30. Decompose Conditional é usada quando você tem uma condição complexa

    com várias ramificações e a lógica se torna difícil de entender e manter. Essa técnica envolve decompor a condição em partes menores e mais claras, facilitando a compreensão e a manutenção do código.
  31. Decompose Conditional você identifica uma condição complexa com várias cláusulas

    e extrai cada cláusula em um método ou função separada, com um nome descritivo. Em seguida, você substitui a condição original pela chamada desses métodos ou funções, tornando a lógica mais expressiva e legível.
  32. Introduce Assertions usada para adicionar verificações assertivas no código, a

    fim de detectar e capturar erros ou estados inválidos durante o desenvolvimento e depuração. Essa técnica envolve a inserção de afirmações (assertions) para validar condições que devem ser verdadeiras em determinados pontos do código.
  33. Introduce Assertions você identifica um ponto no código onde é

    necessário garantir uma condição específica. Em seguida, você adiciona uma asserção que verifica essa condição e, se a condição não for verdadeira, um erro ou exceção é lançado.
  34. Replace Constructor with Factory Method é usada quando você tem

    uma classe com um ou mais construtores que podem ser substituídos por uma função de fábrica. Essa técnica envolve a criação de uma função estática que encapsula a criação do objeto, fornecendo uma interface mais expressiva e flexível para criar instâncias da classe.
  35. Replace Constructor with Factory Method você identifica um ou mais

    construtores em uma classe que podem ser substituídos por uma função de fábrica. Em seguida, você cria uma função estática na classe que encapsula a lógica de criação do objeto, fornecendo uma forma mais descritiva ou personalizada de criar instâncias.
  36. Pull up method é usada quando você tem métodos semelhantes

    em subclasses e deseja movê-los para a classe pai, a fim de evitar duplicação de código e promover a reutilização. Essa técnica envolve mover um método de uma ou mais subclasses para a classe pai, tornando-o um método comum que pode ser compartilhado por todas as subclasses.
  37. Pull up method você identifica um método em uma ou

    mais subclasses que tem uma implementação semelhante e pode ser movido para a classe pai. Em seguida, você move esse método para a classe pai e ajusta as chamadas correspondentes nas subclasses para chamar o método na classe pai.
  38. Extract Subclass é usada quando você tem uma classe que

    está realizando funcionalidades que são específicas de um subconjunto de objetos dessa classe. Essa técnica envolve a criação de uma nova subclasse que representa esse subconjunto específico de objetos e move as funcionalidades relevantes para essa nova subclasse.
  39. Extract Subclass você identifica um grupo de objetos dentro de

    uma classe existente que possui comportamentos e características distintas dos demais objetos. Em seguida, você cria uma nova subclasse que representa esse grupo específico de objetos e move os métodos e atributos relevantes para essa subclasse. A subclasse herda da classe original e, assim, compartilha o comportamento comum com os outros objetos da classe pai.
  40. Collapse Hierarchy é usada quando você tem uma hierarquia de

    classes onde a diferenciação entre as subclasses se torna desnecessária ou irrelevante. Essa técnica envolve a remoção de uma ou mais subclasses intermediárias, movendo seus atributos e comportamentos diretamente para a classe pai.
  41. Collapse Hierarchy você identifica que a diferenciação entre as subclasses

    não é mais necessária ou relevante. Em seguida, você remove as subclasses intermediárias e move seus atributos e comportamentos diretamente para a classe pai. Isso simplifica a hierarquia, reduz a complexidade e melhora a legibilidade do código.
  42. Conclusion Cada técnica de refatoração visa resolver um problema específico

    e muitas vezes elas devem ser aplicadas em conjunto.