طوال فترة عملي مع Bitrix ، أتيحت لي الفرصة للعمل مع عدد كبير جدًا من المشاريع التي طورها شخص ما قبلي. فيما يلي تحسينات طفيفة ، وإصلاح أخطاء وأخطاء متنوعة في المنطق ، وإعادة تصميم موقع الويب والتغييرات العالمية على الوظائف الحالية. ومثل أي مطور آخر ، أكره أن أقوم بنسخ القمامة والعكازات والبقع "المؤقتة" ، والتي يتم تذكرها في الواقع بواسطة إصدار آخر من المنتج.
هنا سأحاول ألا أركز على "أسوأ الممارسات" القياسية عند البرمجة في PHP ، مثل تجاهل اختيار الأسماء والوظائف المتغيرة ، واستعلامات قاعدة البيانات غير الضرورية في حلقة ، ونقص عمليات التحقق من بيانات المستخدم في النماذج ، وتجاهل التعليقات وما شابه ذلك. سأحاول أن أتطرق بالضبط إلى اللحظات المتأصلة في تطوير Bitrix ، والتي ستسمح لاحقًا بتجنب السخط واللعنات ضدك من المبرمج الذي كان عليه أن يرافق التعليمات البرمجية الخاصة بك. ونعم ، غالبًا ما سوف تصبح هذا المبرمج بنفسك في غضون عام ، أو أكثر ، عندما تنسى تمامًا سبب إدراج هذا العكاز أو ذاك هنا.
"اكتب الرمز كما لو كان مصحوبًا بمريض نفسي عنيف يعرف مكان إقامتك" (ج) جون ف. وودز
الأول والأهم ، في رأيي ، مهم - من أجل السماء ،
استخدم المجلد المحلي . إنه أمر حيوي ببساطة عند استخدام نظام التحكم في الإصدار - كل ما عليك فعله هو إضافة المجلد / bitrix / إلى الاستثناءات. هذا كل شيء. علاوة على ذلك ، يتم تنفيذ جميع عمليات التطوير تقريبًا فقط. هذا يبسط إلى حد كبير البحث عن الملفات والمكونات الضرورية لاحقًا ، ويساعد على عدم انسداد المستودع بالملفات غير الضرورية ، وفي الواقع - إنه يجلب شجرة المشروع إلى نظرة "بشرية" أكثر أناقة.
لا تقم بتعديل النواة . حتى إذا كنت متأكدًا من أنه لن يتم تحديثه. حتى لو كان أسرع. حتى لو كنت كسولاً. ننسى هذا الفكر مثل كابوس. إذا كنت بحاجة إلى تغيير منطق مكون قياسي ، فقم بنقله إلى مساحة الاسم الجديدة / local / مكونات / تعديل / والعمل معه. وينطبق الشيء نفسه على الوحدات والأدوات وأنشطة العمليات التجارية.
لا ترمي ملف init.php . اجمع بين وظائف العمل مع وحدة نمطية معينة أو وظيفية في فصل دراسي ، واكتب هذا الفصل بأكمله في ملف منفصل ، وفي init.php فقط قم بتضمين هذه الملفات وكتابة معالجات الأحداث. قابلت ملفات init.php التي تبلغ كل منها 500 كيلوبايت ، حيث تم خلط الوظائف وتعريف الثوابت والفئات وتهيئة المعالجات في فوضى. بالطبع ، عندما اضطررت لفهم هذه الملفات ، لعنت من سبقوني.
لا تتعلق الفقرة التالية بحالة تطوير حلول جاهزة للسوق ، عندما يكون الهدف هو جعل الوظائف الأكثر قابلية للتخصيص من الجزء العام للمستخدم النهائي. إذا كنت تعمل في مشروع معين ، في ToR معينة -
لا تحاول إنشاء قالب موحد للمكون لجميع المناسبات . أنا شخصياً ألتزم بفلسفة - من الأفضل أن يكون لدي بعض النماذج البسيطة التي يتم استخدامها لأغراض مختلفة عن واحدة عالمية ، ولكن سيكسر الشيطان ساقه لاحقًا. بالطبع ، في كل حالة ، تحتاج إلى البناء على ما هو - الاختصاصات وخيارات التنفيذ وما شابه ذلك ، ولكن يجب ألا تنسى ماكينة Occam’s Razor. كمثال ، سأقدم مشروعًا واحدًا لشركة تأجير ، والذي حدث لي أن أعدله. تم تنفيذ المشروع نفسه ، بطبيعة الحال ، بشكل فظيع ؛ إلى الرعب الحقيقي ، كان في صفحات قسم من كتالوج الخدمة. كان لكل قسم من الأقسام الخمسة تخطيطًا خاصًا به ، اختلف فيه موضع الكتل على الصفحة ، ومن حيث المبدأ ، اختلف وجود بعضها. وبالنسبة للصفحات الخمس جميعها ، تم استخدام نموذج واحد مع مجموعة من مكالمات مكونة ، إذاً ، ومضاعفة مكالمات المكونات ، وأنماط الربط والنصوص البرمجية ، والتي ، علاوة على ذلك ، تتعارض بشكل دوري مع بعضها البعض. ونتيجة لذلك - كان ملف ضخم لفهم "بدون نصف لتر" مثل الموت. على الرغم من أنه يبدو أن ما منعك من عمل 5 قوالب مختلفة وعدم خلق صعوبات من البداية؟
استخدم API . لا تعيد اختراع العجلة حيث لا حاجة إليها. استخدم الوثائق - تم وصف المنتج بالكامل بشكل جيد ، ويمكن أيضًا عرض كل وظيفة بالتفصيل على bxapi.ru.
تجنب استعلامات قاعدة البيانات المباشرة . هذه حالة خاصة من الفقرة السابقة - استخدم API. يمكن أن تؤدي الطلبات السريعة وغير الآمنة إلى تلف البيانات أو فقدها أو حتى التنازل عنها.
لا تستخدم مكونات CNC من جذر الموقع . العواقب ، كقاعدة ، محزنة إلى حد ما ، نظرًا لأن CNC تستخدم ملف معالج العنوان ، فإن محاولة استخدامه من الجذر تكسر بسهولة عنوان المكونات الأخرى ، بالإضافة إلى 404 صفحة. لن يكون هناك شيء خاطئ إذا كانت المقالات التي وجهتها موجهة إلى / articles / folder ، وكانت المنتجات ذات صلة بـ / كتالوج /.
ربط css و js باستخدام واجهة برمجة التطبيقات. ما زلت أرى النصوص وأوراق الأنماط باستخدام علامات html في كل مكان. استخدم الكائن class \ Bitrix \ Main \ Page \ Asset والوظائف addJs () و addCss (). سيسمح هذا بدمج الملفات ، ثم تخزينها مؤقتًا بنقرة واحدة على مربع الاختيار في إعدادات الوحدة الرئيسية
وأخيرًا ، لا يتعلق الخطأ فقط بـ Bitrix ، ولكنه كان مؤلمًا للغاية بالنسبة لي لمواجهة المشاكل المرتبطة به.
تحقق من إبطال المصفوفة مع نتائج التحديد . كمثال ، آخر مرة التقيت فيها بهذه المشكلة كانت عند العمل مع متجر واحد عبر الإنترنت. شكوى: يتم تحميل الصفحات في بعض الأحيان لمدة 16 ثانية. ما يرتبط به غير واضح. من خلال التجربة والخطأ ، اكتشفت أن الصفحات لا يتم تحميلها بشكل غير لائق لفترة طويلة إلا عندما تكون السلة فارغة. يبدو ، لماذا؟ كما اتضح ، ظهرت نافذة منبثقة في السلة عند التحويم ، حيث تم عرض صور البضائع الموضوعة في السلة. حسنًا ، ماذا فعل المطور السابق؟ أخذت نتيجة مكون "السلة الصغيرة" وفي ملف result_modifier.php قمت باستدعاء GetList () للبضائع لتحديد الصور باستخدام مرشح من مصفوفة معرفات المنتج ، ثم أضفت صور src من نتائج التحديد إلى مصفوفة المنتج المقابل. ونتيجة لذلك ، عندما لم تكن هناك سلع في السلة ، ترك الفلتر فارغًا ، وسقط كتالوج البضائع بالكامل في التحديد. حسنا ، ثم دورة لكل و ... لدينا ما لدينا. من الواضح أنه في مرحلة التطوير مع اختبار 15 منتجًا ، كان هذا غير محسوس ، وظهرت مشاكل بالفعل في ظروف القتال. على الرغم من أنه يبدو أن الأمر يستحق وضع الشيك فارغًا ($ arResult ['ITEMS']) ...
هذا هو المكان الذي أنهي فيه أعلى "أسوأ ممارسة" شخصية بالنسبة لي بشأن تطوير Bitrix. إذا ساعدت هذه المعلومات على الأقل شخصًا ما في تجنب الأخطاء في المستقبل وتحسين أسلوب تطويره ، فهذا يعني أنها لم تذهب سدى.