TOP

O que é refatoração?

Descrição

Reestruturação (Refactoring) – alterações feitas na estrutura interna do software (software) para torná-lo mais fácil de entender e mais rápido de modificar sem alterar o comportamento externo. Além disso, é uma reestruturação do software através da aplicação de uma sequência de refatorações sem alterar o comportamento externo do software.


Vantagens da refatoração:

Quando você precisa refatorar:

Maus cheiros no código (Smells Catalog) :

Possíveis opções de refatoração

  1. Moving Features Between Objects (Transferência de código completo entre objetos):

    • Move Method (Desprendimento de método) – isole um método separado se o método for muito longo ou contenha código que exija comentários.
    • Move Field (Campo móvel) – realizado quando o campo é usado por outra classe com mais frequência do que onde está definido.
  2. Organizing Data (Disposição dos dados):

    • Encapsulate Field (Encapsulamento de Campo) - hum, dois princípios básicos da OOP são o encapsulamento ou ocultação de dados. Ao tornar os dados públicos, os objetos podem ler e alterar seus valores sem as noções do proprietário dos dados. Portanto, fechamos este campo e fornecemos métodos de acesso.
    • Encapsulate Collection (Encapsulamento de Coleção) - muitas vezes uma sala de aula contém uma coleção de exemplares. Esta coleção pode ser uma matriz, lista, conjunto ou vetor. O método getter não precisa retornar o objeto da coleção, pois isso permitiria aos clientes modificar o conteúdo da coleção, bem como o conhecimento da classe que possuem. Portanto, você precisa retornar o valor retornado pelo método somente leitura e criar métodos para adicionar/remover elementos.
  3. Composing Methods (Extraindo e combinando código):

    • Extract Method (Desprendimento de método) – se você tiver um trecho de código que possa ser agrupado, coloque esse trecho em um método separado com um nome que explique sua finalidade. Assim, o nome do método substituirá os comentários.
    • Inline Method (Incorporação de método) – às vezes é útil mover o corpo de um método para o código que o chama. Às vezes, os corpos dos métodos são tão autoexplicativos quanto o nome próprio do método. Além disso, podem existir situações em que existem muitos métodos diferentes, cuja estrutura não é bem-sucedida e, portanto, é melhor colocar todos eles em um método geral e depois separar os métodos de outra forma.
    • Inline Temp (Inserção de uma variável temporária) – a substituição de uma variável temporária à qual uma expressão simples é atribuída apenas uma vez. Às vezes, essa variável interfere em outras refatorações.
    • Replace Temp with Query (Substituindo uma variável temporária por uma chamada de método) – é usado quando uma variável temporária é usada para armazenar o valor de uma expressão. Neste caso, substitua a expressão por um método e substitua todas as referências no código a esta variável pelo novo método.
    • Split Temporary Variable (Dividir uma variável temporária) – aplica-se quando uma variável temporária única é usada para atribuir resultados diferentes várias vezes (a menos que seja uma variável usada em um loop dentro de um loop e não seja uma variável para acumular o resultado). Neste caso, criamos uma variável separada para cada atribuição.
  4. Simplifying Conditional Expressions (Simplificando expressões com condições):

    • Decompose Conditional (Decomposição do operador condicional) – executado quando temos uma cadeia condicional de verificações (if-then-else). Substituímos a condição (if), partes de then e else por métodos separados. Contribuímos para uma melhor compreensão do motivo da ramificação e os nomes dos métodos esclarecem ao final do trecho de código correspondente.
    • Consolidate Conditional Expression (Consolidação da expressão condicional) - é realizado que haja uma série de verificações de condição que forneçam o mesmo resultado. Você precisa combinar todas as verificações em uma expressão única ou método condicional.
    • Consolidate Duplicate Conditional Fragmentos (consolidação de fragmentos condicionais duplicados) – o mesmo fragmento está presente em todos os ramos da expressão condicional. Você precisa mover este trecho de código para esta expressão.
    • Remove Control Flag (Removendo o sinal de controle) – existe uma variável que atua como sinal de controle para uma série de expressões lógicas. Usamos BREAK ou RETURN.
    • Replace Conditional with Polymorphism (Substituindo o operador condicional por polimorfismo) – é executado quando existe um operador condicional cujo comportamento depende do tipo de objeto. É necessário mover cada ramo do operador condicional para um método sobrecarregado da subclasse. Torne o código-fonte abstrato.