سؤال

ما هي أفضل طريقة للتعامل مع وظائف "الأداة المساعدة" في إطار OOP PHP؟ في الوقت الحالي ، لدينا ملف له عدة وظائف مطلوبة في جميع أنحاء النظام. (على سبيل المثال ، أ distribute() الوظيفة التي تقبل القيمة والمصفوفة ، وإرجاع صفيف مع القيمة الموزعة في نفس النسب ونفس مفاتيح صفيف الإدخال.)

لطالما شعرت "متسخًا" باستخدام ذلك لأنه ليس موجهًا نحو الكائن على الإطلاق. هل من الأفضل نقلها إلى فصول مختلفة كطرق ثابتة ، أم أن هذا مجرد حل دلالي؟ أم أنه سيكون هناك مستوى في إطار ستسقط فيه بعض الأشياء خارج بنية OOP؟

هل كانت مفيدة؟

المحلول

لقد كنت دائمًا أكثر براغماتية حول أسئلة مثل هذه.

إذا كنت ترغب في الذهاب بالكامل ، فيجب أن تلتصق بها في فصول. ومع ذلك ، فإن هذه الفئات ستكون فقط فئات الحاويات ، لأنها لا تمثل حقًا كائنات من أي نوع.

أيضًا: سيتطلب استخدام الفئات إما أن يكون لديك مثيل لتلك الفئة ، باستخدام نمط Singleton أو إعلان كل وظيفة ثابتة. الأول أبطأ (حسنًا ، قد لا يكون كثيرًا ، ولكن في إطار عمل كبير مثل تلك التي تصبح كبيرة أيضًا - خاصة في اللغات المفسرة مثل PHP) ، في حين أن اللغتين الثانية والثالثة عديمة الفائدة وببساطة غلاف OOP لمجموعة من الوظائف (وخاصة النهج الثالث).

تعديل: لا تتردد في يثبت لي خطأ. ربما اكون. أنا لست من ذوي الخبرة للغاية ورأيت ذلك دائمًا بهذه الطريقة ، لكنني قد أكون مخطئًا.

نصائح أخرى

أنا أميل إلى صنع ملف Util() الفئة التي تحتوي على طرق ثابتة فقط ، وليس لها سمات ، ولا يتم موررا منها. في الأساس ، يعمل كـ "مساحة اسم" إلى مجموعة من وظائف الأداة المساعدة. سأسمح لهذا الفئة بالنمو في الحجم ، ولكن في بعض الأحيان ستقسم الطرق إلى فصولها الخاصة إذا كان من الواضح أن هذه الطرق مصممة فقط للعمل مع أنواع معينة من البيانات أو إذا كان من الواضح أن مجموعة من الأساليب ذات الصلة تم تجميعها في فئة جنبا إلى جنب مع ، ربما ، بعض السمات.

أعتقد أنه من الجيد تمامًا الانحراف عن ممارسات OOP البحتة طالما أن الكود الذي ينحرف منظم جيدًا ولا يخلق عيوبًا معمارية في نظامك يجعل من الصعب فهمها وصيانتها.

أفكر دائمًا في وظائف المنفعة كملحقات لوظائف PHP القياسية. إنها ليست موجهة نحو الكائن لأنك لا تحصل حقًا على أي فائدة من جعلها OO.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top