นี่คือเวอร์ชันที่ได้รับการปรับปรุงใหม่ของ Gilded Rose Refactoring Kata ดั้งเดิมใน PHP แพ็คเกจมาพร้อมกับการทดสอบหน่วย PHP ที่สร้างขึ้น การปรับโครงสร้างใหม่เสร็จสิ้น และเพิ่มฟีเจอร์ใหม่
คุณสามารถดูข้อกำหนดของ Gilded Rose ได้ที่นี่
php-xml
เพียงทำตามคำแนะนำบนหน้าจอในการติดตั้งโครงการที่คุณต้องการ:
git clone [email protected]:mantis4444/gilded-rose-refactoring-kata-php.git /desired/directory
cd /desired/directory
composer install
โปรดทราบ ว่าหากคุณทำบน Windows OS คุณต้องใช้ แทน
/
เพื่อแยกไดเร็กทอรี
texttest_fixture.php
ด้วยคำสั่ง php src/texttest_fixture.php
src/texttest_fixture.php
./vendor/bin/phpunit
phpunitโปรดทราบ ว่าคำแนะนำเหล่านี้จะถือว่าคุณอยู่ในไดเร็กทอรีโปรเจ็กต์
ฉันคงรูปแบบการเขียนโค้ดดั้งเดิมไว้เพื่อปรับให้เข้ากับสถานการณ์ปัจจุบัน แม้ว่าฉันจะชอบใช้มาตรฐาน PSR และเนมสเปซก็ตาม ผลที่ได้คือแอปพลิเคชันรองรับอินพุตดั้งเดิม ดังนั้นไฟล์ texttest_fixture.php
จึงไม่ถูกแตะต้อง
ก่อนอื่นเลย ฉันทำการทดสอบเพื่อให้แน่ใจว่าโค้ดต้นฉบับทำงานอย่างถูกต้องและน่าประหลาดใจ แม้ว่าโครงสร้างอัลกอริทึมจะยุ่งเหยิงก็ตาม จากนั้นกระบวนการปรับโครงสร้างใหม่ก็เริ่มต้นขึ้น ในตอนแรกฉันลดขนาดฟังก์ชัน update_quality()
ให้มากที่สุด โค้ดสามารถอ่านได้มากขึ้น if
ก็ยังมีเงื่อนไขมากเกินไป และฉันไม่เห็นวิธีที่จะย่อให้เล็กลงให้มากขึ้นได้อย่างไร
หลังจากทำการวิเคราะห์แล้ว ฉันพบว่าความ หลากหลาย คือวิธีแก้ปัญหา ก่อนอื่น ฉันได้สร้างคลาสไอเท็มที่ปรับปรุงแล้วที่เรียกว่า ItemEnhanced
ซึ่งขยายคลาส Item
ดั้งเดิมและที่ไม่สามารถแตะต้องได้ เพื่อปรับปรุงการทำงานของมัน ความท้าทายแรกคือการปรับปรุง ไอเท็ม และสนับสนุนโค้ดคำสั่งดั้งเดิม ในขณะที่โค้ดต้นฉบับกำลังตั้งค่าไอเท็มด้วยคลาส Item
ฉันต้องหาทางปรับปรุงไอเท็มโดยไม่ต้องเปลี่ยนแปลง ฉันสร้างมันขึ้นมาโดยใช้ตัวสร้างการเริ่มต้นแอป GildedRose เพื่อเพิ่มประสิทธิภาพ รายการ ในขณะที่ตั้งค่า เพื่อให้ออบเจ็กต์ รายการ ต้นฉบับได้รับการปรับปรุงเช่นกัน ฉันใช้ลิงก์อ้างอิง
ตอนนี้คลาส ItemEnhanced
มีฟังก์ชันที่ไอเท็มทุกประเภทใช้ร่วมกัน ในขั้นตอนถัดไป ฉันสร้างคลาสสำหรับไอเท็มทุกประเภทที่พวกเขาจะมีฟังก์ชันพิเศษของตัวเอง พวกเขากำลังขยายคลาส ItemEnhanced
ดังนั้น Item
ดั้งเดิมก็เช่นกัน ฟังก์ชันของ ItemEnhanced
ที่ใช้เฉพาะในคลาสประเภทรายการเหล่านั้นจะ ได้รับการป้องกัน สำหรับการเข้าถึงในคลาสประเภทรายการเท่านั้น
หลังจากการปรับโครงสร้างใหม่เสร็จสิ้น การทดสอบก็ผ่านไปได้สำเร็จ ตอนนี้ถึงเวลาแล้วที่จะเพิ่มฟังก์ชันการทำงานใหม่ๆ การมีโครงสร้างใหม่ของแอปพลิเคชันทำให้ทำได้ง่าย ก่อนอื่นฉันสร้างคลาสประเภทไอเท็มใหม่สำหรับไอเท็ม "Conjured" โดยมีกฎเฉพาะ จากนั้นฉันก็สร้างการทดสอบใหม่สำหรับมัน
Voila ทุกอย่างทำงานได้อย่างมีเสน่ห์ โค้ดสามารถอ่านและยืดหยุ่นได้มากกว่ามาก ฉันจะบอกว่าการทดสอบสามารถปรับปรุงได้มาก มันอาจจะเฉพาะเจาะจงมากกว่าที่เป็นอยู่ในตอนนี้มาก