ConstructiCat Logo
CodeBust.
Browse section ▾

Refactoring.

A controlled technique for improving the design of existing code. Browse by group, see the code smells these techniques treat, the test smells in your test suite, or the smells of AI-generated code.

Design Patterns Mascot
Añadir Parámetro

Problema: Un método no tiene suficientes datos para realizar ciertas acciones. Solución: Crea un nuevo parámetro para pasar los datos necesarios.

001
Design Patterns Mascot
Ocultar método

Problema: Un método no es utilizado por otras clases o se utiliza únicamente dentro de su propia jerarquía de clases. Solución: Haz el método privado o protegido.

002
Antipatterns Mascot
Introducir Objeto Parámetro

Problema: Tus métodos contienen un grupo de parámetros que se repite. Solución: Sustituye estos parámetros por un objeto.

003
Architectural Patterns Mascot
Parametrizar método

Problema: Varios métodos realizan acciones similares que solo se diferencian en sus valores internos, números u operaciones. Solución: Combina estos métodos utilizando un parámetro que pase el valor especial necesario.

004
Antipatterns Mascot
Preservar el Objeto Completo

Problema: Obtienes varios valores de un objeto y después los pasas como parámetros a un método. Solución: En lugar de eso, intenta pasar el objeto completo.

005
Code Smells Mascot
Eliminar parámetro

Problema: Un parámetro no se utiliza en el cuerpo de un método. Solución: Elimina el parámetro no utilizado.

006
Code Smells Mascot
Eliminar método de asignación

Problema: El valor de un campo debería establecerse solo cuando se crea, y no cambiar en ningún momento posterior. Solución: Por lo tanto, elimina los métodos que establecen el valor del campo.

007
Antipatterns Mascot
Renombrar método

Problema: El nombre de un método no explica lo que hace. Solución: Renombra el método.

008
Refactoring Mascot
Reemplazar constructor con método de fábrica

Problema: tienes un constructor complejo que hace algo más que limitarse a asignar los valores de los parámetros a los campos del objeto. Solución: crea un método de fábrica y úsalo para reemplazar las llamadas al constructor.

009
Architectural Patterns Mascot
Reemplazar Código de Error con Excepción

Problema: ¿Un método devuelve un valor especial que indica un error? Solución: Lanza una excepción en su lugar.

010
Design Patterns Mascot
Reemplazar Excepción con Comprobación

Problema: ¿Lanzas una excepción en un lugar donde una simple comprobación haría el trabajo? Solución: Reemplaza la excepción con una comprobación de condición.

011
Antipatterns Mascot
Reemplazar Parámetro con Métodos Explícitos

Problema: Un método está dividido en partes, cada una de las cuales se ejecuta dependiendo del valor de un parámetro. Solución: Extrae las partes individuales del método en sus propios métodos y llámalos en lugar del método original.

012
Architectural Patterns Mascot
Sustituir parámetro por llamada a método

Problema: Llamas a un método de consulta y pasas sus resultados como parámetros de otro método, cuando ese método podría llamar a la consulta directamente. Solución: En lugar de pasar el valor a través de un parámetro, intenta colocar una llamada a la consulta dentro del cuerpo del método.

013
Code Smells Mascot
Separar Consulta de Modificador

Problema: ¿Tienes un método que devuelve un valor pero también cambia algo dentro de un objeto? Solución: Divide el método en dos métodos independientes. Como es de esperar, uno de ellos debe devolver el valor y el otro modifica el objeto.

014
Design Patterns Mascot
Cambiar Asociación Bidireccional por Unidireccional

Problema: Tienes una asociación bidireccional entre clases, pero una de las clases no usa las características de la otra. Solución: Elimina la asociación no utilizada.

015
Design Patterns Mascot
Cambiar referencia por valor

Problema: Tienes un objeto de referencia demasiado pequeño y que cambia con poca frecuencia como para justificar la gestión de su ciclo de vida. Solución: Conviértelo en un objeto de valor.

016
Antipatterns Mascot
Cambiar Asociación Unidireccional a Bidireccional

Problema: Tienes dos clases que necesitan usar cada una las características de la otra, pero la asociación entre ellas es únicamente unidireccional. Solución: Añade la asociación que falta a la clase que la necesita.

017
Code Smells Mascot
Cambiar Valor por Referencia

Problema: Tienes muchas instancias idénticas de una misma clase que necesitas reemplazar con un único objeto. Solución: Convierte los objetos idénticos en un único objeto de referencia.

018
Refactoring Mascot
Duplicar datos observados

Problema: ¿Se almacenan datos de dominio en clases responsables de la GUI? Solución: En ese caso, conviene separar los datos en clases independientes, asegurando la conexión y sincronización entre la clase de dominio y la GUI.

019
Antipatterns Mascot
Encapsular colección

Problema: Una clase contiene un campo de colección y un getter y un setter simples para trabajar con la colección. Solución: Haz que el valor devuelto por el getter sea de solo lectura y crea métodos para añadir o eliminar elementos de la colección.

020
Refactoring Mascot
Encapsular Campo

Problema: Tienes un campo público. Solución: Haz que el campo sea privado y crea métodos de acceso para él.

021
Code Smells Mascot
Reemplazar Array con Objeto

Problema: Tienes un array que contiene varios tipos de datos. Solución: Reemplaza el array con un objeto que tendrá campos separados para cada elemento.

022
Antipatterns Mascot
Reemplazar valor de datos por objeto

Problema: Una clase (o grupo de clases) contiene un campo de datos. El campo tiene su propio comportamiento y datos asociados. Solución: Crea una nueva clase, coloca en ella el antiguo campo y su comportamiento, y almacena el objeto de la clase dentro de la clase original.

023
Design Patterns Mascot
Reemplazar número mágico por constante simbólica

Problema: Tu código usa un número que tiene cierto significado. Solución: Reemplaza ese número por una constante con un nombre legible que explique el significado del número.

024
Architectural Patterns Mascot
Reemplazar Subclase con Campos

Problema: Tienes subclases que se diferencian únicamente en sus métodos (que devuelven constantes). Solución: Reemplaza los métodos con campos en la clase padre y elimina las subclases.

025
Architectural Patterns Mascot
Reemplazar código de tipo con clase

Problema: Una clase tiene un campo que contiene un código de tipo. Los valores de este tipo no se usan en condiciones de operadores y no afectan al comportamiento del programa. Solución: Crea una nueva clase y usa sus objetos en lugar de los valores del código de tipo.

026
Code Smells Mascot
Reemplazar código de tipo con estado/estrategia

Problema: tienes un tipo codificado que afecta al comportamiento pero no puedes usar subclases para deshacerte de él. Solución: reemplaza el código de tipo por un objeto de estado. Si es necesario reemplazar el valor de un campo con código de tipo, se «conecta» otro objeto de estado.

027
Code Smells Mascot
Reemplazar código de tipo con subclases

Problema: tienes un tipo codificado que afecta directamente al comportamiento del programa (los valores de este campo disparan distinto código en condicionales). Solución: crea subclases para cada valor del tipo codificado. Luego extrae los comportamientos relevantes de la clase original a estas subclases. Reemplaza el código de control de flujo con polimorfismo.

028
Architectural Patterns Mascot
Autoencapsular Campo

Problema: Usas acceso directo a campos privados dentro de una clase. Solución: Crea un getter y un setter para el campo, y úsalos únicamente a ellos para acceder al campo.

029
Architectural Patterns Mascot
Colapsar jerarquía

Problema: Tienes una jerarquía de clases en la que una subclase es prácticamente igual que su superclase. Solución: Fusiona la subclase y la superclase.

030
Antipatterns Mascot
Extraer interfaz

Problema: Varios clientes utilizan la misma parte de la interfaz de una clase. Otro caso: parte de la interfaz de dos clases es idéntica. Solución: Mueve esa porción idéntica a su propia interfaz.

031
Antipatterns Mascot
Extraer subclase

Problema: Una clase tiene características que solo se usan en determinados casos. Solución: Crea una subclase y úsala en esos casos.

032
Refactoring Mascot
Extraer superclase

Problema: Tienes dos clases con campos y métodos comunes. Solución: Crea una superclase compartida para ellas y mueve a ella todos los campos y métodos idénticos.

033
Code Smells Mascot
Formar Método Plantilla

Problema: Tus subclases implementan algoritmos que contienen pasos similares en el mismo orden. Solución: Mueve la estructura del algoritmo y los pasos idénticos a una superclase, y deja la implementación de los pasos diferentes en las subclases.

034
Design Patterns Mascot
Subir el cuerpo del constructor

Problema: tus subclases tienen constructores con código que es casi idéntico. Solución: crea un constructor en la superclase y traslada a él el código que es igual en las subclases. Llama al constructor de la superclase desde los constructores de las subclases.

035
Architectural Patterns Mascot
Subir campo

Problema: Dos clases tienen el mismo campo. Solución: Elimina el campo de las subclases y muévelo a la superclase.

036
Design Patterns Mascot
Subir Método

Problema: Tus subclases tienen métodos que realizan un trabajo similar. Solución: Haz que los métodos sean idénticos y luego muévelos a la superclase correspondiente.

037
Refactoring Mascot
Bajar campo

Problema: ¿Se usa un campo solo en unas pocas subclases? Solución: Mueve el campo a esas subclases.

038
Architectural Patterns Mascot
Bajar método

Problema: ¿El comportamiento implementado en una superclase es utilizado por una sola subclase (o por unas pocas)? Solución: Mueve este comportamiento a las subclases.

039
Refactoring Mascot
Reemplazar delegación con herencia

Problema: Una clase contiene muchos métodos sencillos que delegan en todos los métodos de otra clase. Solución: Haz que la clase sea heredera del delegado, lo que vuelve innecesarios los métodos delegantes.

040
Design Patterns Mascot
Reemplazar Herencia con Delegación

Problema: Tienes una subclase que usa solo una parte de los métodos de su superclase (o no es posible heredar los datos de la superclase). Solución: Crea un campo y coloca en él un objeto de la superclase, delega los métodos en el objeto de la superclase y elimina la herencia.

041
Architectural Patterns Mascot
Consolidar expresión condicional

Problema: Tienes varios condicionales que conducen al mismo resultado o acción. Solución: Consolida todos esos condicionales en una sola expresión.

042
Antipatterns Mascot
Consolidar fragmentos condicionales duplicados

Problema: Se encuentra código idéntico en todas las ramas de un condicional. Solución: Mueve el código fuera del condicional.

043
Code Smells Mascot
Descomponer Condicional

Problema: Tienes un condicional complejo (if-then/else o switch). Solución: Descompón las partes complicadas del condicional en métodos separados: la condición, el then y el else.

044
Antipatterns Mascot
Introducir aserción

Problema: para que una porción de código funcione correctamente, ciertas condiciones o valores deben ser verdaderos. Solución: sustituye estas suposiciones por comprobaciones de aserción concretas.

045
Code Smells Mascot
Introducir objeto nulo

Problema: Como algunos métodos devuelven null en lugar de objetos reales, tienes muchas comprobaciones de null en tu código. Solución: En lugar de null, devuelve un objeto nulo que muestre el comportamiento por defecto.

046
Architectural Patterns Mascot
Eliminar bandera de control

Problema: Tienes una variable booleana que actúa como bandera de control para múltiples expresiones booleanas. Solución: En lugar de la variable, utiliza break, continue y return.

047
Antipatterns Mascot
Reemplazar condicional con polimorfismo

Problema: Tienes un condicional que ejecuta diversas acciones en función del tipo o las propiedades de un objeto. Solución: Crea subclases que se correspondan con las ramas del condicional. En ellas, crea un método compartido y traslada a él el código de la rama correspondiente del condicional. Después, reemplaza el condicional por la llamada al método pertinente. El resultado es que se alcanzará la implementación adecuada mediante polimorfismo en función de la clase del objeto.

048
Refactoring Mascot
Reemplazar condicional anidado con cláusulas de guarda

Problema: Tienes un grupo de condicionales anidados y es difícil determinar el flujo normal de ejecución del código. Solución: Aísla todas las comprobaciones especiales y los casos límite en cláusulas separadas y colócalas antes de las comprobaciones principales. Lo ideal es tener una lista «plana» de condicionales, uno tras otro.

049
Antipatterns Mascot
Extraer clase

Problema: Cuando una clase hace el trabajo de dos, surge la incomodidad. Solución: En su lugar, crea una clase nueva y coloca en ella los campos y métodos responsables de la funcionalidad correspondiente.

050
Refactoring Mascot
Ocultar Delegado

Problema: El cliente obtiene el objeto B a partir de un campo o método del objeto A. Después, el cliente llama a un método del objeto B. Solución: Crea un nuevo método en la clase A que delegue la llamada al objeto B. Ahora el cliente no conoce la clase B ni depende de ella.

051
Antipatterns Mascot
Incorporar clase

Problema: Una clase casi no hace nada y no es responsable de nada, y no se planean responsabilidades adicionales para ella. Solución: Mueve todas las características de la clase a otra.

052
Architectural Patterns Mascot
Introducir un método externo

Problema: una clase de utilidad no contiene el método que necesitas y no puedes añadirlo a la clase. Solución: añade el método a una clase cliente y pásale como argumento un objeto de la clase de utilidad.

053
Antipatterns Mascot
Introducir extensión local

Problema: una clase de utilidad no contiene algunos métodos que necesitas, pero no puedes añadir esos métodos a la clase. Solución: crea una clase nueva que contenga los métodos y conviértela en hija o en envoltorio (wrapper) de la clase de utilidad.

054
Refactoring Mascot
Mover campo

Problema: Un campo se utiliza más en otra clase que en la suya propia. Solución: Crea un campo en una nueva clase y redirige hacia él a todos los usuarios del campo antiguo.

055
Antipatterns Mascot
Mover método

Problema: un método se usa más en otra clase que en la suya propia. Solución: crea un método nuevo en la clase que más lo usa y traslada allí el código del método antiguo. Convierte el código del método original en una referencia al nuevo método de la otra clase, o bien elimínalo por completo.

056
Code Smells Mascot
Eliminar intermediario

Problema: Una clase tiene demasiados métodos que simplemente delegan en otros objetos. Solución: Elimina estos métodos y obliga al cliente a llamar directamente a los métodos finales.

057
Design Patterns Mascot
Extraer método

Problema: tienes un fragmento de código que se puede agrupar. Solución: traslada este código a un nuevo método (o función) independiente y sustituye el código antiguo por una llamada al método.

058
Code Smells Mascot
Extraer Variable

Problema: Tienes una expresión difícil de entender. Solución: Coloca el resultado de la expresión o de sus partes en variables separadas que se expliquen por sí mismas.

059
Antipatterns Mascot
Método en Línea

Problema: Cuando el cuerpo de un método es más evidente que el propio método, usa esta técnica. Solución: Sustituye las llamadas al método por el contenido del método y elimina el propio método.

060
Code Smells Mascot
Incorporar variable temporal

Problema: Tienes una variable temporal a la que se asigna el resultado de una expresión simple y nada más. Solución: Sustituye las referencias a la variable por la propia expresión.

061
Design Patterns Mascot
Eliminar Asignaciones a Parámetros

Problema: Se asigna algún valor a un parámetro dentro del cuerpo del método. Solución: Usa una variable local en lugar de un parámetro.

062
Refactoring Mascot
Reemplazar método con objeto-método

Problema: Tienes un método largo en el que las variables locales están tan entrelazadas que no puedes aplicar Extraer método. Solución: Transforma el método en una clase separada de modo que las variables locales se conviertan en campos de la clase. Después podrás dividir el método en varios métodos dentro de la misma clase.

063
Refactoring Mascot
Reemplazar Variable Temporal por Consulta

Problema: Colocas el resultado de una expresión en una variable local para su uso posterior en el código. Solución: Mueve toda la expresión a un método independiente y devuelve el resultado desde él. Consulta el método en lugar de usar una variable. Incorpora el nuevo método en otros métodos, si es necesario.

064
Refactoring Mascot
Dividir variable temporal

Problema: Tienes una variable local que se utiliza para almacenar varios valores intermedios dentro de un método (salvo las variables de los bucles). Solución: Usa variables distintas para valores distintos. Cada variable debe ser responsable de una sola cosa en concreto.

065
Antipatterns Mascot
Sustituir algoritmo

Problema: ¿Quieres reemplazar un algoritmo existente por uno nuevo? Solución: Reemplaza el cuerpo del método que implementa el algoritmo por un algoritmo nuevo.

066