هذه هي النسخة المعاد تشكيلها من النسخة الأصلية من 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، فستحتاج إلى استخدام بدلاً من
/
لفصل الدليل.
texttest_fixture.php
باستخدام الأمر php src/texttest_fixture.php
.src/texttest_fixture.php
../vendor/bin/phpunit
.لاحظ أن هذه التعليمات تفترض أنك في دليل المشروع.
لقد احتفظت بأسلوب الترميز الأصلي للتكيف مع الوضع الحالي. على الرغم من أنني كنت أرغب في استخدام معيار PSR ومساحات الأسماء. ونتيجة لذلك، يدعم التطبيق الإدخال الأصلي، وبالتالي لم يتم لمس ملف texttest_fixture.php
.
في البداية، قمت بإجراء اختبارات للتأكد من أن الكود الأصلي يعمل بشكل صحيح وبشكل مدهش، على الرغم من هيكله الخوارزمي الفوضوي. ثم بدأت عملية إعادة الهيكلة. في البداية قمت بتقليص وظيفة update_quality()
قدر الإمكان. أصبحت التعليمات البرمجية أكثر قابلية للقراءة، ولكن لا يزال هناك عدد كبير جدًا من الشروط if
لم أر طريقة يمكنني من خلالها تقليلها بشكل أكبر.
وبعد إجراء بعض التحليلات أدركت أن تعدد الأشكال هو الحل. بادئ ذي بدء، قمت بإنشاء فئة عناصر محسنة تسمى ItemEnhanced
والتي كانت تعمل على توسيع فئة Item
الأصلية والتي لا يمكن المساس بها لتحسين وظائفها. كان التحدي الأول هو تحسين العناصر ودعم كود التعليمات الأصلي. أثناء قيام الكود الأصلي بإعداد العناصر بفئة Item
، كان علي أن أجد طريقة لتحسين العناصر دون تغييرها. لقد قمت بذلك باستخدام مُنشئ تهيئة تطبيق GildedRose ، حيث قمت بتحسين العناصر أثناء إعدادها. لتحسين كائن العنصر الأصلي أيضًا، استخدمت الروابط المرجعية.
الآن تتمتع الفئة ItemEnhanced
بالوظيفة التي تشترك فيها جميع أنواع العناصر. في الخطوة التالية، قمت بإنشاء فصل لكل نوع من العناصر التي سيكون لها وظائفها الخاصة. إنهم يقومون بتوسيع فئة ItemEnhanced
وبالتالي Item
الأصلي أيضًا. وظائف ItemEnhanced
التي يتم استخدامها فقط في فئات نوع العنصر هذه محمية لإمكانية الوصول في فئة نوع العنصر فقط.
بعد الانتهاء من إعادة البناء، تمر الاختبارات بنجاح. لقد حان الوقت الآن لإضافة وظائف جديدة. وجود هيكل جديد للتطبيق كان من السهل القيام بذلك. أولاً قمت بإنشاء فئة نوع عنصر جديدة للعنصر "Conjured" بقواعده المحددة. ثم قمت بإنشاء اختبارات جديدة لذلك.
كل شيء يعمل كالسحر ، الكود أكثر قابلية للقراءة ومرونة. أود أن أقول أنه يمكن تحسين الاختبارات كثيرًا. يمكن أن يكونوا أكثر تحديدًا مما هم عليه الآن.