這是 PHP 中原始 Gilded Rose Refactoring Kata 的重構版本。套件隨附創建的 PHP 單元測試、完成的重構和新增的新功能。
鍍金玫瑰的要求可以在這裡找到。
php-xml
。只需按照螢幕上的指示操作即可。若要安裝您需要的項目:
git clone [email protected]:mantis4444/gilded-rose-refactoring-kata-php.git /desired/directory
。cd /desired/directory
。composer install
install 。請注意,如果您在Windows 作業系統上執行此操作,則需要使用而不是
/
進行目錄分隔。
php src/texttest_fixture.php
執行texttest_fixture.php
檔案。src/texttest_fixture.php
檔案中編輯。./vendor/bin/phpunit
執行 PHPUnit 測試。請注意,這些說明假定您位於專案目錄中。
我保留了原來的編碼風格以適應當前的情況。儘管我希望使用 PSR 標準和命名空間。因此,應用程式支援原始輸入,因此texttest_fixture.php
檔案未被觸及。
首先,我進行了測試,以確保原始程式碼能夠正常工作,令人驚訝的是,儘管其演算法結構很混亂,但它確實可以正常工作。然後重構過程開始了。一開始我盡可能縮小了update_quality()
函數。程式碼變得更具可讀性,但仍然有太多條件if
,我沒有找到一種方法可以進一步最小化它。
經過一些分析後,我意識到多態性是解決方案。首先,我創建了一個名為ItemEnhanced
的增強項目類,它擴展了原始且不可觸及的Item
類以改善其功能。第一個挑戰是增強Items並支援原始指令碼。雖然原始程式碼是使用Item
類別設定項目,但我必須找到一種方法來增強項目而不更改它。我在GildedRose應用程式初始化構造函數上完成了它,在設定專案時增強了它們。為了使原始項目物件也得到增強,我使用了參考連結。
現在, ItemEnhanced
類別具有所有類型的項目共享的功能。下一步,我為每種類型的專案建立了類別,它們將具有自己的特殊功能。他們正在擴展ItemEnhanced
類,因此也擴展了原始Item
。僅在這些項目類型類別中使用的ItemEnhanced
函數僅受項目類型類別中的可存取性保護。
重構完成後,測試成功通過。現在是新增功能的時候了。有了新的應用程式結構,做到這一點很容易。首先,我為「Conjured」專案建立了新的專案類型類別及其特定規則。然後我為它創建了新的測試。
瞧,一切都像魅力一樣,程式碼更具可讀性和靈活性。我想說測試可以改進很多。它們可能比現在更具體。