Profile Image

Carlos Vigueras

Senior Backend Developer

Refactoring – Regla de tres

Hablando en términos de refactorización de código, la regla de tres, es una regla muy útil que siempre aconsejo aplicar cuando estemos realizando nuevos desarrollos o nuevas funcionalidades en una aplicación. Y no es que lo diga yo, si no que Martin Fowler propone aplicar la regla de tres de la siguiente forma:

  • Cuando hagas algo por primera vez, hazlo.
  • Cuando hagas algo parecido por segunda vez, no te conformes con tener que repetirlo, pero hazlo de todos modos.
  • Cuando hagas algo por tercera vez, empieza a refactorizar.

La refactorización en nuestros proyectos es muy importante, ya que cuando refactorizamos un código, no solo vamos a ayudar a los demás que vengan detrás, si no que nos ayudaremos a nosotros mismos a entender mejor el código, y a tener un código mas limpio, legible y entendible.

Y siempre debemos aplicar refactorización de código en todo los casos, bien cuando estemos agregando una característica, cuando estemos corrigiendo un error o cuando estemos haciendo un revisión de código.

Aunque todo esto es muy fácil de entender, vamos a ver un código de ejemplo muy sencillo, y vamos paso a paso, viendo cómo iríamos refactorizando.

Supongamos, que tenemos tres clases, la clase Gato, la clase Pájaro y la clase Serpiente. Comencemos con la clase Gato.

    public class Gato
    {
        public int NumeroPatas { private get; set; }
        public string Especie { private get; set; }

        public int GetNumeroPatas()
        {
            return NumeroPatas;
        }

        public string TipoEspecie()
        {
            return Especie;
        }
    }Lenguaje del código: PHP (php)

Hasta aquí todo bien, tenemos una clase Gato, la cual tiene dos propiedades, NumeroPatas y Especie, y dos métodos GetNumeroPatas() y TipoEspecie(), por lo que podríamos hacer alusión a la primera premisa, que dice así: Cuando hagas algo por primera vez, hazlo.

Vamos a por la clase Pajaro:

    public class Pajaro
    {
        public int NumeroPatas { private get; set; }
        public string Especie { private get; set; }

        public int GetNumeroPatas()
        {
            return NumeroPatas;
        }

        public string TipoEspecie()
        {
            return Especie;
        }
    }Lenguaje del código: PHP (php)

Ahora ya tenemos una clase Pájaro también, que usa las mismas propiedades y los mismos métodos. Por lo que vemos que se aplica la segunda premisa: Cuando hagas algo parecido por segunda vez, no te conformes con tener que repetirlo, pero hazlo de todos modos.

En este ejemplo el código es igual, pero podría no serlo, podría ser un código que se puede agrupar, y no necesariamente siempre ha de ser el mismo idéntico.

Veamos la clase Serpiente:

    public class Serpiente
    {
        public int NumeroPatas { private get; set; }
        public string Especie { private get; set; }

        public int GetNumeroPatas()
        {
            return NumeroPatas;
        }

        public string TipoEspecie()
        {
            return Especie;
        }
    }Lenguaje del código: PHP (php)

Una vez más, usamos las mismas propiedades, los mismos métodos, y sería el momento de aplicar la tercera premisa: Cuando hagas algo por tercera vez, empieza a refactorizar.

Pues hagámosle caso y refactoricemos, ya que vemos que tenemos exactamente el mismo código tres veces repetido, por lo que es hora de ponernos manos a la obra, antes no:

    public class Animal
    {
        public int NumeroPatas { private get; set; }
        public string Especie { private get; set; }

        public int GetNumeroPatas()
        {
            return NumeroPatas;
        }

        public string TipoEspecie()
        {
            return Especie;
        }
    }Lenguaje del código: PHP (php)
    public class Pajaro : Animal {}

    public class Gato : Animal {}

    public class Serpiente : Animal {}Lenguaje del código: CSS (css)
    var gato = new Gato
    {
        Especie = "Felino",
        NumeroPatas = 4
    };Lenguaje del código: JavaScript (javascript)

Como veréis, hemos creado una clase Animal, de la que heredan, Gato, Pájaro y Serpiente y hacen uso de sus propiedades y métodos, y hemos dejado centralizado el código para su uso en las tres clases. De este modo si en un momento dado, se añade o modifica un método en la clase Animal, este será accesible desde las tres otras y sólo se tendrá que realizar la refactorización en un sitio único.

¿ Habéis aplicado muchas veces vosotros esta regla o la veis útil ? Os leo en comentarios.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *