Composing Methods.
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.
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.
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.
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.
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.
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.
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.
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.
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.