这是 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
。请注意,如果您在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”项目创建了新的项目类型类及其特定规则。然后我为它创建了新的测试。
瞧,一切都像魅力一样,代码更具可读性和灵活性。我想说测试可以改进很多。它们可能比现在更加具体。