これは、PHP のオリジナルの Gilded Rose リファクタリング Kata のリファクタリングされたバージョンです。パッケージには、作成された PHP 単体テストが付属しており、リファクタリングが完了し、新機能が追加されています。
金色のバラの要件については、こちらをご覧ください。
php-xml
などの追加の PHP パッケージが必要になる場合があります。画面の指示に従ってください。プロジェクトをインストールするには、次のものが必要です。
git clone [email protected]:mantis4444/gilded-rose-refactoring-kata-php.git /desired/directory
に作成します。cd /desired/directory
を入力します。composer install
をインストールします。 Windows OSでこれを行う場合は、ディレクトリの区切りに/
代わりにを使用する必要があることに注意してください。
php src/texttest_fixture.php
を使用してtexttest_fixture.php
ファイルを実行する必要があります。src/texttest_fixture.php
ファイルで編集できます。./vendor/bin/phpunit
を使用して PHPUnit テストを実行できます。これらの手順では、プロジェクト ディレクトリにいることを前提としていることに注意してください。
現在の状況に適応するために、元のコーディング スタイルを維持しました。 PSR 標準と名前空間を使用したかったのですが。結果として、アプリケーションはオリジナルの入力をサポートするため、 texttest_fixture.php
ファイルは変更されませんでした。
まず最初に、元のコードが適切に動作していることを確認するためのテストを作成しました。アルゴリズム構造が乱雑であるにもかかわらず、驚くべきことに正常に動作しました。その後、リファクタリングプロセスが開始されました。最初は、 update_quality()
関数を可能な限り縮小しました。コードははるかに読みやすくなりましたが、条件付きif
がまだ多すぎて、それをさらに最小限に抑える方法がわかりませんでした。
いくつかの分析を行った後、ポリモーフィズムが解決策であることがわかりました。まず最初に、機能を向上させるために元のアンタッチ不可のItem
クラスを拡張した、 ItemEnhanced
という拡張アイテム クラスを作成しました。最初の課題は、アイテムの強化と独自の命令コードのサポートでした。元のコードでは、 Item
クラスを使用してアイテムを設定していますが、変更せずにアイテムを強化する方法を見つける必要がありました。 GildedRoseアプリ初期化コンストラクターで作成し、アイテムを設定しながら強化しました。オリジナルのアイテムオブジェクトも強化するために、参照リンクを使用しました。
現在、 ItemEnhanced
クラスには、すべてのタイプのアイテムが共有する機能があります。次のステップでは、アイテムの種類ごとに独自の特別な機能を持つクラスを作成しました。これらはItemEnhanced
クラスを拡張しているため、元のItem
も拡張されています。これらの項目タイプ クラス内でのみ使用されるItemEnhanced
の機能は、項目タイプ クラス内でのみアクセス可能として保護されます。
リファクタリングが完了すると、テストは正常に通過します。新しい機能を追加するときが来ました。アプリケーションの新しい構造により、それを行うのは簡単でした。まず、特定のルールを持つ「召喚」アイテム用の新しいアイテム タイプ クラスを作成しました。次に、それに対する新しいテストを作成しました。
ほら、すべてが魔法のように機能し、コードがはるかに読みやすく、柔軟になります。テストは大幅に改善される可能性があると思います。それらは現在よりもはるかに具体的になる可能性があります。