Videoclub - Ejemplo Refactoring de Martin Fowler

Extraido del primer capítulo de "Refactoring: Improving the Design of Existing Code" de Marting Fowler.

Download .zip Download .tar.gz View on GitHub

El Videoclub.

Ejemplo de refactoring obtenido del primer capítulo de "Refactoring: Improving the Design of Existing Code" de Marting Fowler.

Qué encontramos

Código para gestionar el alquiler de películas en un videoclub. Las películas tendrán diferentes precios dependiendo de si son consideradas estrenos, infantiles o alquileres normales.

También se gestiona el cálculo de puntos para un programa de fidelización de los clientes. Su cálculo se basa en el tipo y el número de días del alquiler.

El resultado muestra por consola el estado de la cuenta de un cliente.

Objetivo

En una primera fase debemos introducir una nueva función para obtener una versión en HTML del estado de la cuenta del cliente.

Una vez conseguido, los usuarios nos pedirán cambiar el sistema de tipos de películas, así como los cálculos asociados, probablemente añadiendo nuevos tipos.

Lenguajes de programación

Actualmente el código dispone de la siguientes versiones:

  • C#

Entorno de desarrollo

La solución está creada con Visual Studio 2010.

Instrucciones para intentarlo

Retroceded al primer commit para obtener la versión inicial.

Solución dada

He ido siguiendo los pasos del libro, con algún paso extra de refactor para hacer uso de las ventajas que ofrece el lenguaje C#, como el uso de foreach o de LINQ.

Creo los tests suficientes como para tener la seguridad de que no modificaremos el comportamiento visible.

El siguiente paso es facilitar la reutilización de los cálculos para nuestra futura nueva función con resultado en Html.

Creo la nueva función y test.

Inicio la segunda fase refactorizando al patron State.

He realizado commit a cada paso indicando el refactor y la razón por la que se realiza.