Table of Contents
مقدمة: لماذا الانتقال إلى قاعدة مدونة قواعد السلوك الخاصة بدول العالم؟
والانتقال إلى قاعدة بيانات متوافقة مع مبادرة " سوليد " هو قرار استراتيجي يتخذه العديد من الأفرقة الإنمائية مع تزايد تعقيد مشاريعها، ومع ذلك فإن المبادئ المتعلقة بالمسؤولية الوحيدة، والمفتوحة/المغلقة، والاستعاضة عن " ليزكوف " ، والفصل بين الناس، و " تحويل " ، توفر إطاراً مثبتاً لبناء برامجيات يسهل الحفاظ عليها وتوسيعها واختبارها، ومع ذلك، فإن المصاعب الواقعية تواجه في كثير من المصاعب في مجال الاختلاف في مجال المبادئ القائمة على المعارف.
Understanding the SOLID Principles
وقبل أن تتخلى عن التحديات، من الضروري أن يكون هناك إدراك قوي لما يعنيه كل مبدأ من المبادئ في الممارسة العملية، وشركة SOLID هي عبارة عن مختصر لخمسة مبادئ تصميمية تهدف إلى جعل تصميمات البرامجيات أكثر تفهما ومرونة وقابلية للاستمرار.
مبدأ المسؤولية الوحيدة
وينبغي أن يكون لكل فئة أو وحدة من الفئات سبب واحد للتغيير، بمعنى أن تكون لها مسؤولية واحدة محددة جيدا، وعندما تتولى الفئة مسؤوليات متعددة، فإن التغييرات في المسؤولية الواحدة يمكن أن تؤثر على نحو غير مقصود على الآخرين، مما يؤدي إلى شفرة الرشوة، فعلى سبيل المثال، فإن الفئة التي تدير عملية توثيق المستخدمين وترسل إخطارات بالبريد الإلكتروني تنتهك مبدأ المسؤولية الشخصية لأنها تقترن بمنطق الإخطار.
المبدأ المفتوح/المغلق
وينبغي أن تكون كيانات البرمجيات مفتوحة للتمديد ولكنها مغلقة للتعديل، وهذا يعني أنه ينبغي أن تكون قادرا على إضافة وظيفة جديدة دون تغيير الرمز القائم، بدلا من تعديل فئة لتضيف السلوك، تمددها - غالبا عن طريق الميراث أو الوصلات البينية أو التكوين، والمثال الكلاسيكي هو نظام تجهيز المدفوعات حيث يمكن إضافة طرق جديدة للدفع (مثلا، بي بال، بطاقة الائتمان) عن طريق تنفيذ وصلة مشتركة بدون تعديل المنطق.
Liskov Substitution Principle (LSP)
وينبغي الاستعاضة عن أهداف الدرجة العليا بأجسام من الدرجة الفرعية دون المساس بصحة البرنامج، وبأبسط العبارات، يجب أن تحترم الفئات المستقاة العقد الذي تحدده فئة الأساس، وتحدث الانتهاكات عندما تتخطى طبقة فرعية طريقة بطريقة تغير سلوكها أو تلقي استثناءات غير متوقعة، وعلى سبيل المثال، لا يمكن أن يكون هناك طبقة أساس من فئة الطول دون المستوى: (3)]
مبدأ الفصل بين الأوجه
وينبغي ألا يضطر العملاء إلى الاعتماد على الوصلات البينية التي لا يستخدمونها، بل بدلاً من واجهة واحدة كبيرة أو واحدة من الوصلات البينية الأحادية، فمن الأفضل إيجاد واجهات أصغر وأكثر تحديداً، وهذا يقلل من أثر التغييرات ويجعل النظام أكثر عدلاً، وإن كان الانتهاك المشترك هو وجود تفاعل مع الأساليب ، :
مبدأ الإعالة
وينبغي ألا تعتمد الوحدات النموذجية الرفيعة المستوى على وحدات متدنية المستوى؛ وينبغي أن تعتمد الخلاصات على الخلاصات، وينبغي ألا تتوقف الخلاصات على التفاصيل؛ وينبغي أن تتوقف التفاصيل على الخلاصات، ويتحقق ذلك عادة عن طريق حقن الإعالة واستخدام الوصلات البينية أو الصفوف المستعصية، وعلى سبيل المثال، ينبغي أن تتوقف طبقة منطق الأعمال التجارية على واجهة قابلة للسحب، وليس على تنفيذ قاعدة بيانات محددة (مثل نظام " ميبول " أو مونغو " ).
التحديات المشتركة التي تواجه المرحلة الانتقالية
إن اعتماد مبادئ SOLID في قاعدة بيانات قائمة نادرا ما يكون مجرد مسألة بسيطة هي تغيير المسار، وتواجه الأفرقة مجموعة من العقبات التي يمكن أن تبطئ التقدم وتخلق الاحتكاك، وهنا التحديات الأكثر شيوعا، التي يتسع نطاقها مع السياق العملي.
1- الثغرات في المعرفة وسوء فهمها
وحتى المطورين ذوي الخبرة يمكن أن يكافحوا مع ما يميزهم برنامج SOLID، فالمبادئ مجردة، وتطبيقها على نحو صحيح يتطلب فهما عميقا لأنماط التصميم، والتقارب، والتماسك، والمجال المحدد، فبدون التدريب المناسب، يمكن أن تنفذ الأفرقة بطريقة سطحية - مثل إنشاء العديد من الفصول الصغيرة دون مسؤوليات واضحة، أو بناء طبقات مضللة تضيف تعقيدا بدلا من الحد منها.
2 - قانون دفن الثقاب
وكثيرا ما تفتقر قواعد الإرث إلى الاختبارات، وترتبط بمكونات مقترنة بشدة، وتنتهك مبادئ متعددة من مبادئ SOLID في آن واحد، فإصلاحها لتكون متوافقة مع مبادرة SOLID هو تعهد ضخم، ويجب النظر بعناية في كل تغيير لتجنب حدوث تراجعات، وبدون مجموعة اختبار شاملة، يضطر المطورون إلى الاعتماد على الاختبار اليدوي أو على كسر القدرة الوظيفية، ويمكن أن يثبط حجم العمل الضئيل الأفرقة ويؤدي إلى محاولات لا تُنجز.
3 - عدم الاتساق في تطبيقات الفريق
وعندما يعمل مطورون متعددون على نفس قاعدة البيانات، يمكنهم تفسير مبادئ SOLID تفسيرا مختلفا، وقد يصلح أحد المطورين طبقة تتبع نظام المسؤولية القانونية، بينما يواصل آخر إضافة المسؤوليات إلى الفصول الاحتكارية القائمة، ويخلق هذا التناقض قاعدة مشفرة مهجورة حيث توجد بعض الأجزاء ذات بنية جيدة، بينما يظل المطورون الآخرون فوضويين، مما يؤدي إلى الخلط وزيادة الحمل المعرفي أثناء استعراضات الشفرة وصيانتها.
4- التجارة بين الفظائع والنزعة العملية
ويمكن أن يؤدي الالتزام الصارم بشركة SOLID إلى تصميمات غير دقيقة للغاية يصعب فهمها وتباطؤها، فمثلا، قد يؤدي تطبيق تحويل الإعالة في كل مكان إلى تسلسل هرمي عميق للوصلات البينية والمصانع التي تحجب المنطق الأساسي، وكثيرا ما تكافح الأفرقة لإيجاد التوازن الصحيح: متى يكون من المقبول الخروج عن مبدأ " للتبسيط أو الأداء " دون وجود مبادئ توجيهية واضحة بشأن التبسيط؟
5 - الموازنة بين تسليم المؤثرات والمفاعلات
وعادة ما تكون نسق طرق المنتجات مدفوعا بملامح جديدة، لا بتحسينات نوعية المدونة الداخلية، وقد تُبطل الأفرقة التي تخضع للضغط على أداء وظائفها الأولوية في إعادة التصنيع، إذ تعتبرها " ديونا تقنية " يمكن معالجتها لاحقا، ولكن لا تأتي في وقت لاحق، وتتراكم الديون، وحتى عندما تدعم الإدارة إعادة التصنيع، قد يصعب تخصيص وقت دون تأخير في المواعيد النهائية.
6 - تحديد الأدوات والحدود الإطارية
فبعض الأطر واللغات تجعل من الصعب اتباع مبادئ SOLID، فعلى سبيل المثال، فإن الأطر القديمة لبرنامج العمل الإنساني (مثل مدونة قواعد البرمجيات الأولية) أو تطبيقات العيد المضغوطة جدا قد لا تشجع حقن الإعالة أو الفصل بين الوصلات، وفي حين أن الأطر الحديثة (المسح، والتفاؤل، والنسيج) أكثر اتساقا مع نظام SOLID، فإن النظم القديمة قد تتطلب تغييرات كبيرة في الهياكل الأساسية لدعم المبادئ.
الاستراتيجيات الرامية إلى التغلب على التحديات
ويتطلب الانتقال بنجاح إلى قاعدة بيانات SOLID مزيجاً من التعليم، وتغيير العمليات، واتخاذ القرارات العملية، وقد أثبتت الاستراتيجيات التالية فعاليتها في العديد من الأفرقة والمشاريع.
الاستثمار في التدريب والتفاهم المشترك
وقبل أن يُعيد تشكيل خط واحد من الرموز، ينبغي للفريق بأكمله أن يتوصل إلى فهم مشترك لمبادئ SOLID ولسبب أهميتها، ويمكن تحقيق ذلك من خلال حلقات العمل، ودورات البرمجة، والرسومات الرمزية.
اعتماد المفاعلات الإضافية
ومحاولة إعادة كتابة قاعدة بيانات كاملة في آن واحد هي تقريبا وصفة للكوارث، بل استخدام قاعدة الكشافة: " يتركون الرمز أنظف مما وجدتموه " . وعند العمل على وضع سمة أو إصلاح الحشرات، تغتنم الفرصة لإعادة تصنيع المنطقة المباشرة - استخراج طبقة، وكسر طريقة كبيرة إلى أصغر حجما، أو استحداث واجهة بينية.
وضع معايير للترميز والخطوط التوجيهية للهندسة
توثيق تفسير فريقكم لمبادئ SOLID كما تنطبق على قاعدة بياناتكم، ووضع وثيقة معايير الترميز تشمل ما يلي:
- ]]Clas size and responsibility guidelines[ - مثل " لا ينبغي أن تتجاوز أي فئة 200 خط؛ ويجب أن تكون لكل فئة مسؤولية محددة بوضوح " .
- ][ قواعد الفصل الداخلي ][ - " ينبغي ألا يكون للأوجه أكثر من أربعة طرق؛ وأن تقسم إذا كان الزبائن يستخدمون مجموعة فرعية فقط " .
- ][ أنماط حقن الازدحام ][ - " يجب حقن جميع المعالين الخارجيين عن طريق البناء؛ ولا يسمح بأنماط تحديد مواقع الخدمة " .
وينبغي إنفاذ هذه المعايير من خلال أدوات آلية (مثل PHPStan for PHP, or ] Pylint] for Python) and peer code reviews. Update the standards as the team learns from experience.
أدوات التحليل المستقرة واستعراض الرموز
ويمكن أن يلحق التحليل الثابت العديد من انتهاكات مبادئ SOLID تلقائياً، فعلى سبيل المثال، لا يمكن أن تُعَلَم أدوات مثل SonarQube فئات ذات تعقيدات دوجية عالية أو مسؤوليات كثيرة جداً. ] PHPMD (PHP) أو
الأولوية للطرائق العالية الأثر
ولا تحتاج جميع أجزاء قاعدة البيانات إلى نفس المستوى من الامتثال لهذه القاعدة، وتحديد الوحدات التي كثيرا ما تكون معد َّلة، والتي هي أساسية لمنطق الأعمال التجارية، أو التي تسبب أكبر ألم )مثل ارتفاع معدلات الحشرات، وبطء التنمية(، وتثبيت تلك المعدلات أولا، حيث أن عائد الاستثمار سيكون أعلى، أما بالنسبة للوحدات المستقرة أو النادر تغييرها، فينظر في تركها كما هو الحال إلى أن الحاجة تدعو إلى تعديلها.
تعزيز ثقافة التعاون والتعلم المستمر
فالانتقال إلى مبادرة " سوليد " هو بمثابة تحول ثقافي كتطور تقني، وتشجيع المطورين على طرح الأسئلة واقتراح التحسينات والتحدي للتعقيد غير الضروري، ويمكن أن تساعد اجتماعات استعراض الهيكل المنتظم الفريق على تقييم التقدم المحرز وتعديل الاستراتيجيات، واستخدام البرمجة المزدوجة لنشر المعرفة عن طريق الاتصال الجنسي بين صغار المطورين، والاعتراف بالجهود التي تحسن نوعية المدونة، وليس مجرد سرعة المعالم، مع مرور الوقت، سيعمل الفريق على استيعاب هذه المبادئ وتطبيقها بطريقة غريزة.
دراسة الحالة الحقيقية في العالم: Migrating a Monolithic PHP Application
ولتوضيح هذه الاستراتيجيات، النظر في إنشاء منبر افتراضي للتجارة الإلكترونية في منتصف الحجم مبني على إطار عمل قديم لبرنامج العمل الإنساني، وفي البداية، كان للقاعدة الرمزية طبقة واحدة [()] تناولت كل شيء من التحقق من صحة المدخلات إلى الاستفسارات المتعلقة بقاعدة البيانات والإخطارات بالبريد الإلكتروني - وهو انتهاك واضح للبرنامج الإقليمي للتعاون التقني فيما بين البلدان النامية، وقرر الفريق الشروع في عملية انتقال باستخدام إعادة التصنيع التدريجي.
وقد بدأ تدريب جميع المطورين على شبكة " سوليد " باستخدام دورات وبرامج على الإنترنت، ثم حددوا كنموذج أعلى أثر لأنه تم تعديله في كل طبعة تقريباً، ومن ثم استخلاص عدة مرات:
- درجة ] للمصادقة (SRP)
- An ] interface and MySQL implementation (DIP)
- An and [ISP, DIP]
كما أدخلوا حاوية حقن تبعية لتجميع كل شيء، وقد اقترن كل استخراج باختبارات للوحدة )استخدام برنامج PHPUnit(، مما أعطى الفريق ثقة بأن التغييرات لم تكسر السلوك القائم، فأكثر من ستة أشهر أصبحت قاعدة البيانات أكثر عدلا وقابلية للاختبار وسهولة التوسع - يمكن الآن إضافة طرق جديدة للدفع عن طريق تنفيذ وصلة ]FLT:18[ دون أن تخفض سمات البق جديدة.
قياس النجاح: كيف تعرف أنّك تحرز تقدما
والانتقال إلى منظمة شولد الدولية ليست دولة ثنائية؛ بل هي رحلة تحسين مستمرة، وتستخدم القياسات التالية لقياس التقدم المحرز:
- Reduction in class size] - متوسط خطوط الرموز لكل فئة ينبغي أن ينخفض مع تقسيم المسؤوليات.
- Increase in test coverage] - A SOLID design is inherently more testable; aim for at least 70% code coverage.
- ] النقصان في التعقيدات الدورية ]] - ويعني التعقيد الأدنى أن الأساليب تؤدي إلى عدد أقل من الأشياء.
- Faster feature development] - Measure the average time to implement a new feature before and after refactoring.
- Reduction in defect density] - يقل عدد الحشرات لكل نقطة سمية عن تحسن نوعية المدونة.
استعراض هذه القياسات بانتظام مع الفريق وتعديل مجالات التركيز حسب الحاجة، كما أن المعالم الاحتفالية - مثلا عندما تكون وحدة واحدة من قبل ممتثلة تماما للنموذج الخاص بمكافحة شريان الحياة للسودان.
الشلالات المشتركة إلى أفويد
حتى مع أفضل الاستراتيجيات، يمكن أن تسقط الفرق في فخ، راقب:
- ]Over-abstraction: إنشاء واجهات ومصانع لكل شيء، حتى عندما يكون هناك تنفيذ واحد فقط، وهذا يزيد من تعقيدات لا داعي لها دون فائدة حقيقية.
- Paralysis by analysis]: Spending too much time designing the perfect structure instead of making incremental progress.
- Dogmatic adherence]: Forcing SOLID on every piece of code, including one-off scripts or small components that are unlikely to change.
- Ignoring the team ]: Making architectural decisions without consensus or buy-in, leading to resistance and poor adoption.
الحفاظ على عقلية عملية: مبادئ SOLID هي مبادئ توجيهية، وليس قوانين، والهدف هو وضع مدونة ] جيدة بما فيه الكفاية لتلبية احتياجاتك الحالية والقربة من الأثاث، مع ترك الباب مفتوحا لمزيد من التحسين.
الاستنتاج: قيمة قاعدة مدونة قواعد السلوك في طول المدة
إن الانتقال إلى قاعدة بيانات متوافقة مع مبادرة " سولويد " هو مهمة صعبة ولكنها مكافئة للغاية، ويتطلب وقتا طويلا وتعليما وانضباطا واستعدادا للاستثمار في المستقبل، غير أن الدفع كبير: تخفيض الديون التقنية، والإسراع في استيعاب المطورين الجدد، وانخفاض عدد حشرات الإنتاج، وزيادة المرونة في الاستجابة لمتطلبات الأعمال التجارية المتغيرة، ومن خلال فهم التحديات المشتركة وتطبيق الاستراتيجيات المبينة في هذه المادة، لا سيما فيما يتعلق بالتكرير الداخلي.
For further reading, consider Robert C. Martin’s original articles on SOLID and ] the Wikipedia overview for a deep dive into each principle.