Esta es la versión refactorizada del Kata de refactorización Gilded Rose original en PHP. El paquete viene con pruebas unitarias PHP creadas, refactorización realizada y nueva característica agregada.
Los requisitos de la rosa dorada se pueden encontrar aquí.
php-xml
. Simplemente siga las instrucciones en pantalla.Para instalar el proyecto necesitas:
git clone [email protected]:mantis4444/gilded-rose-refactoring-kata-php.git /desired/directory
.cd /desired/directory
.composer install
del proyecto. Tenga en cuenta que si lo hace en el sistema operativo Windows, debe usar en lugar de
/
para la separación de directorios.
texttest_fixture.php
con el comando php src/texttest_fixture.php
.src/texttest_fixture.php
../vendor/bin/phpunit
.Tenga en cuenta que estas instrucciones suponen que se encuentra en el directorio del proyecto.
Mantuve el estilo de codificación original para adaptarme a la situación actual. Aunque me hubiera gustado utilizar el estándar y los espacios de nombres PSR. Como resultado, la aplicación admite la entrada original, por lo que el archivo texttest_fixture.php
no fue tocado.
En primer lugar, hice pruebas para asegurarme de que el código original funciona correctamente y sorprendentemente así fue, a pesar de su estructura algorítmica desordenada. Luego comenzó el proceso de refactorización. Al principio reduje la función update_quality()
tanto como fue posible. El código se volvió mucho más legible, pero todavía había demasiados if
y no veía la manera de minimizarlo más.
Después de hacer algunos análisis me di cuenta de que el polimorfismo es la solución. En primer lugar, creé una clase de elemento mejorada llamada ItemEnhanced
que ampliaba la clase Item
original e intocable para mejorar su funcionalidad. El primer desafío fue mejorar los elementos y admitir el código de instrucción original. Si bien el código original configura elementos con la clase Item
, tuve que encontrar una manera de mejorar los elementos sin cambiarlos. Lo hice en el constructor de inicialización de la aplicación GildedRose , mejorando los elementos mientras los configuraba. Para mejorar también el objeto del elemento original, utilicé enlaces de referencia.
Ahora la clase ItemEnhanced
tiene la funcionalidad que comparten todo tipo de elementos. En el siguiente paso creé clases para cada tipo de elemento que tendrían su propia funcionalidad especial. Están ampliando la clase ItemEnhanced
y, por lo tanto, también el Item
original. Las funciones de ItemEnhanced
que se utilizan solo en esas clases de tipo de elemento están protegidas para su accesibilidad solo en la clase de tipo de elemento.
Una vez finalizada la refactorización, las pruebas se realizan con éxito. Ahora era el momento de agregar nuevas funcionalidades. Al tener una nueva estructura de la aplicación, fue fácil hacerlo. Primero creé una nueva clase de tipo de elemento para el elemento "Conjurado" con sus reglas específicas. Luego creé nuevas pruebas para ello.
Listo, todo funciona a las mil maravillas, el código es mucho más legible y flexible. Yo diría que las pruebas se podrían mejorar mucho. Podrían ser mucho más específicos de lo que son ahora.