إزالة الحلقات والشروط المتكررة والمشفرة في PHP

StackOverflow https://stackoverflow.com/questions/210475

  •  03-07-2019
  •  | 
  •  

سؤال

رأيت هذا السؤال مطروحًا حول C# وأود الحصول على إجابة لـ PHP.لدي بعض التعليمات البرمجية القديمة التي تحتوي على 4 صفحات من حلقات وشروط foreach مما يجعل من الصعب قراءتها ومتابعتها.كيف يمكنني أن أجعل هذا أكثر OO؟كنت أفكر في استخدام وظائف SPL ولكني لا أفهم تمامًا ما يتضمنه الأمر حتى الآن.

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

المحلول

ربما يمكن تنظيف هذا الرمز بشكل كبير، ودفعه بعيدًا في اتجاه OO، دون لمس SPL.

هناك حاجة إلى SPL فقط إذا كنت تريد تغيير سلوك الكائن العادي في بنيات اللغة مثل foreach()، أو في الإضافات مثل count()، أو في وظائف الوصول إلى المصفوفة (كل من العامل [] والوظائف مثل key()، next() وما إلى ذلك) .

اقتراحات التنظيف:

  • إذا تم تنفيذ نفس الإجراء عدة مرات (أكثر من مرة أو مرتين) في الكود، فقم بتقسيمه إلى دالة.إذا كان سيتم تنفيذ هذا الإجراء على جميع العناصر في المصفوفة، ففكر في استخدام array_walk.إذا لم يكن المشي في المصفوفة مناسبًا لسبب ما، فاستخدم حلقة :)
  • إذا كان لديك عدة مثيلات لبعض البيانات المرتبطة لغويًا أكثر تعقيدًا من زوج المفتاح: القيمة، مع العمليات المرتبطة، ففكر في تغليفها في فصل دراسي.لكن مساعد موثق رسميًا.قد تناسبك المصفوفة أيضًا.يعتمد على أسلوبك ونوع البيانات.الشيء المهم هنا هو هيكلة أساليب العمل على البيانات والتوثيق.لا يهم حقًا إذا جعلته فصلًا أم لا.
  • بعد الانتهاء من الخطوات المذكورة أعلاه، قم بتقسيم الوظائف والكائنات المكتوبة حديثًا إلى ملفات تضمين منفصلة.أنا أميل إلى تغليف كل شيء تقريبًا في الفصل الدراسي، لذلك لدي في الغالب فصل دراسي واحد.ملف.لكن بعض الفئات المساعدة تشارك ملفًا مع الفئة الرئيسية، وما إلى ذلك.سوف تشعر بذلك.

نصائح أخرى

إذا كنت أنت، كنت أبدأ بالكتابة رمز اختبار.

إذا يمكنك بناء مجموعة من testcases التي تصف بشكل كامل وظيفة كنت إعادة بيع ديون، يمكنك ان تمضي قدما وإعادة كتابة التعليمات البرمجية الخاصة بك آمنة في المعرفة التي سوف لا تزال تعمل.

PHPUnit قد يكون مكانا جيدا للبدء في ذلك.

إذا كنت فهمت بشكل صحيح، لديك حلقات foreach (وما شابه ذلك) متداخلة 4 صفحات عميق، وكنت أتساءل إذا كان هذا الشيء OO كنت قد سمعت عن يمكن أن تساعد.

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

وOO هو وسيلة لتنظيم التعليمات البرمجية لوضع تعريف هياكل البيانات بجانب التعليمات البرمجية التي تعالج تلك هياكل البيانات. في حين أن أحد أهدافها الرئيسية هو مساعدة القراءة من خلال توفير التلخيصات من التعقيد، OO ليست الطريقة الوحيدة للقيام بذلك.

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

ولا تفهموني خطأ؛ أنا من دعاة OO، وخصوصا تقنية لتوفير المطورين مع مفاهيم عالية المستوى لمناقشة تصميم أكثر كفاءة. OO تستحق التعلم.

ولكن لا تدع نقص في المعرفة حول OO يمنعك من سحب رمز الداخلي من الحلقات ووضعها في وظائف ذات الغرض الواحد.

و(إذا كنت قد يساء فهمها مستوى معرفتك OO، اعتذاري.)

ابدأ ببطء.إعادة تشكيلها قطعة في وقت واحد.

إذا كنت تقوم بالتكرار على الكثير من المصفوفات، فانظر إلى وظائف المصفوفة مثل array_map, array_walk, ، والأصدقاء.يعد هذا بمثابة إعادة هيكلة وظيفية أكثر من إعادة هيكلة OO، ولكنه سيأخذك بعيدًا جدًا. لو كان من المنطقي أن تذهب أكثر OO، ثم سيكون لديك بعض الوظائف التي يمكنك بعد ذلك دفعها إلى الفئات المناسبة حسب الحاجة.

وبعض النصائح الجيدة من جوناثان وgnud. لا تقلق كثيرا حول SPL، و معرفة المزيد عن إعادة بيع ديون ، وننظر إلى ما هي أدوات إعادة بيع ديون المتاحة لPHP .

وأيضا لا أستطيع أن يوصي بما فيه الكفاية قراءة العمل بشكل فعال مع رمز تراث :

وطبعا الكنسي rel="nofollow إعادة بيع ديون كتاب :

<وأ href = "http://ecx.images-amazon.com/images/I/519XT0DER6L._SL500_BO2،204،203،200_AA219_PIsitb-sticker-dp-arrow،TopRight،-24،-23_SH20_OU01_.jpg" يختلط = " noreferrer نوفولو "> نص بديل http://ecx.images-amazon.com/images/I/519XT0DER6L._SL500_BO2،204،203،200_AA219_PIsitb-sticker-dp-arrow،TopRight،-24،-23_SH20_OU01_.jpg

وPHP هي لغة صعبة للحفاظ على نظافة من التعليمات البرمجية الروائح، ولكن مع القليل من المثابرة يمكن القيام به! وسوف أشكر نفسك كل يوم لا بد من النظر في مصدر برنامج الخاص بك.

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