Dies ist die überarbeitete Version der ursprünglichen Gilded Rose Refactoring Kata in PHP. Das Paket enthält erstellte PHP-Komponententests, durchgeführte Umgestaltungen und hinzugefügte neue Funktionen.
Die Anforderungen für vergoldete Rosen finden Sie hier.
php-xml
. Folgen Sie einfach den Anweisungen auf dem Bildschirm.Um das Projekt zu installieren, benötigen Sie:
git clone [email protected]:mantis4444/gilded-rose-refactoring-kata-php.git /desired/directory
.cd /desired/directory
ein.composer install
des Projekts. Beachten Sie , dass Sie zur Verzeichnistrennung anstelle von
/
verwenden müssen, wenn Sie dies unter Windows tun.
texttest_fixture.php
mit dem Befehl php src/texttest_fixture.php
ausführen.src/texttest_fixture.php
bearbeitet werden../vendor/bin/phpunit
ausführen.Beachten Sie , dass diese Anweisungen davon ausgehen, dass Sie sich im Projektverzeichnis befinden.
Ich habe den ursprünglichen Codierungsstil beibehalten, um ihn an die aktuelle Situation anzupassen. Allerdings hätte ich gerne den PSR-Standard und die Namensräume verwendet. Infolgedessen unterstützt die Anwendung die ursprüngliche Eingabe, sodass die Datei texttest_fixture.php
nicht berührt wurde.
Zuerst habe ich Tests durchgeführt, um sicherzustellen, dass der ursprüngliche Code trotz seiner chaotischen Algorithmusstruktur ordnungsgemäß funktioniert, und das war überraschenderweise der Fall. Dann begann der Refactoring-Prozess. Am Anfang habe ich die Funktion update_quality()
so weit wie möglich verkleinert. Der Code wurde viel lesbarer, aber es gab immer noch zu viele bedingte if
und ich sah keine Möglichkeit, ihn weiter zu minimieren.
Nach einigen Analysen wurde mir klar, dass Polymorphismus die Lösung ist. Zunächst habe ich eine erweiterte Artikelklasse namens ItemEnhanced
erstellt, die die ursprüngliche und unberührbare Item
erweitert, um ihre Funktionalität zu verbessern. Die erste Herausforderung bestand darin, die Elemente zu verbessern und den ursprünglichen Anweisungscode zu unterstützen. Während der ursprüngliche Code Elemente mit Item
-Klasse einrichtet, musste ich eine Möglichkeit finden, Elemente zu verbessern, ohne sie zu ändern. Ich habe es mit dem Initialisierungskonstruktor der GildedRose -App erstellt und Elemente verbessert, während ich sie festgelegt habe. Um auch das ursprüngliche Artikelobjekt zu verbessern, habe ich Referenzlinks verwendet.
Jetzt verfügt die Klasse ItemEnhanced
über die Funktionalität, die alle Arten von Elementen gemeinsam haben. Im nächsten Schritt habe ich für jeden Artikeltyp eine Klasse erstellt, die ihre eigene spezielle Funktionalität haben soll. Sie erweitern die ItemEnhanced
Klasse und damit auch das ursprüngliche Item
. Funktionen von ItemEnhanced
, die nur in diesen Artikeltypklassen verwendet werden, sind nur für den Zugriff in Artikeltypklassen geschützt .
Nach Abschluss des Refactorings werden die Tests erfolgreich bestanden. Jetzt war es an der Zeit, neue Funktionen hinzuzufügen. Dank der neuen Struktur der Anwendung war dies einfach. Zuerst habe ich eine neue Gegenstandstypklasse für den Gegenstand „Beschworen“ mit seinen spezifischen Regeln erstellt. Dann habe ich neue Tests dafür erstellt.
Voila, alles funktioniert wie ein Zauber, der Code ist viel lesbarer und flexibler. Ich würde sagen, dass die Tests erheblich verbessert werden könnten. Sie könnten viel konkreter sein, als sie es jetzt sind.