Refactoring del Polimorfismo

Este es un resumen de los pasos para refactorizar un algoritmo con polimorfismo. Asumimos que se aplica sobre los parameter objects que cumplen “Tell Don’t Ask” en un algoritmo realizado con objetos de responsabilidad única.

Los pasos son:

  1. Identifique dónde se puede aplicar el polimorfismo
  2. Cree una clase para cada rama del condicional
  3. Actualice las pruebas unitarias para que usen las clases concretas
  4. Elimine las propiedades innecesarias

1. Identifique dónde se puede aplicar el polimorfismo

Busque un sitio donde se tome decisiones con base en una propiedad bool o enum del Parameter Object, como la siguiente:

identifique-donde-aplicar-polimorfismo.PNG

2. Cree una clase para cada rama del condicional

Primero, haga abstracta a la clase original y a su propiedad. Comente el código que llevaremos a otras clases hijas:

clase-abstracta.PNG

Luego, cree una clase hija para cada rama del condicional. En este caso son dos clases. Verifique que sean clases públicas ubicadas en el namespace correcto:

clase-hija-datos-en-udesclase-hija-datos-en-colones

¡Recuerde eliminar el código que comentó en la clase padre! No queremos dejar comentarios innecesarios.

3. Actualice las pruebas unitarias para que usen las clases concretas

4. Elimine las propiedades innecesarias

Cuando ya no se utilicen, elimine las propiedades de tipos (bool, enum). Así, las pruebas unitarias ya no requieren asignar ese tipo ya que al crear la clase hija está siendo explícita en ese tipo:

prueba-unitaria-con-polimorfismo.PNG

Así, hemos eliminado los condicionales que hacen que nuestros algoritmos sean frágiles.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s