이것은 PHP의 원래 Gilded Rose 리팩토링 Kata의 리팩토링 버전입니다. 패키지에는 생성된 PHP 단위 테스트, 리팩토링 완료 및 새로운 기능이 추가된 상태로 제공됩니다.
Gilded Rose 요구 사항은 여기에서 확인할 수 있습니다.
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
의 기능은 항목 유형 클래스에서만 접근성이 보호 됩니다.
리팩토링이 완료되면 테스트가 성공적으로 통과됩니다. 이제 새로운 기능을 추가할 차례였습니다. 새로운 구조의 애플리케이션을 사용하면 쉽게 할 수 있습니다. 먼저 특정 규칙을 사용하여 "창조된" 아이템에 대한 새로운 아이템 유형 클래스를 만들었습니다. 그런 다음 이에 대한 새로운 테스트를 만들었습니다.
짜잔 , 모든 것이 매력처럼 작동하고 코드가 훨씬 더 읽기 쉽고 유연합니다. 테스트가 많이 개선될 수 있다고 말하고 싶습니다. 지금보다 훨씬 더 구체적일 수 있습니다.