Table of Contents

لماذا لا تزال مسائل تطوير صغار

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

ما هي مبادئ SOLID؟

وقبل التخلّص من أساليب التدريس، من الضروري ضمان فهم صغار المطورين للمبادئ ذاتها، وكل مبدأ يتناول اهتماماً محدداً بالتصميم، ويشكل معاً نهجاً متماسكاً إزاء البرمجة ذات الوجهة الموضوعية، وهنا يُشار بسرعة إلى ما يلي:

  • ]S - مبدأ المسؤولية الوحيدة: ][ ينبغي أن يكون للفئة أو الوحدة سبب واحد للتغيير، بمعنى أنها ينبغي أن تكون مسؤولة عن جزء واحد من وظيفة البرنامج.
  • O - Principle (OCP): ] Software entities should be open for extension but closed for modification.
  • L - مبدأ ليزكوف البديل: يجب أن تكون النماذج الفرعية بديلة لأنواعها الأساسية، وإذا كان العميل يتوقع أن يكون صفاً أساسياً، فإن أي فئة مستمدة ينبغي أن تعمل دون كسر العميل.
  • I - مبدأ الفصل بين الأوجه: ] لا ينبغي إجبار أي زبون على الاعتماد على الأساليب التي لا يستخدمها، وينبغي أن تكون العلاقات بين الأوجه صغيرة ومحددة بدلا من كبيرة وعامة.
  • D - مبدأ تحويل الإعالة: ] ينبغي ألا تتوقف النماذج الرفيعة المستوى على وحدات منخفضة المستوى؛ وينبغي أن يعتمد كلاهما على الخلاصات، وينبغي ألا تتوقف الخلاصات على التفاصيل؛ وينبغي أن تتوقف التفاصيل على الخلاصات.

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

لماذا يمكن أن يكون الاختصار مضللاً

ومن الخطأ المشترك معاملة شركة " شولد " (SOLID) كقائمة مرجعية تطبق من الناحية العملية، إن المبادئ مترابطة، فعلى سبيل المثال، يؤدي الالتزام بمبدأ المسؤولية الوحيدة إلى فئات أصغر تتبع بطبيعة الحال مبدأ الفصل بين الأوجه، ويساعد تدريس المبادئ على أن تكون مفاهيم مترابطة بدلا من قوانين منفصلة المطورين على إبداء أسباب تتعلق بالمبادلات.

استراتيجيات التعليم الفعالة للمبادئ المتعلقة بمكافحة شريان الحياة الطبيعية

وتزيد فعالية حلقات العمل، والجمعيات المشفرة، ودورات إعادة التصنيع المصحوبة بمرشدين من المحاضرات وحدها، وتتوسع في الاستراتيجيات التي تعمل بشكل جيد مع صغار المطورين.

1- استخدام الاعتذارات الحقيقية في العالم

- ذكر كل مبدأ في الأغراض أو العمليات اليومية، على سبيل المثال:

  • SRP: ] A Swiss Army knife tries to do everything but does none of them well. A kitchen knife is better because it has one job (cutting). Similarly, a class that handles database access, formatting, and email sending is hard to change.
  • OCP: ] A wall outlet is open for extension (you can plug in new devices) but closed for modification (you do not rewrite the wiring every time). In code, you should be able to add new payment methods without altering existing payment processor classes.
  • LSP: ] If you have a Bird base class with a flock method, all subclasses (Penguin, Sparrow) must be able to fly. Penguins do not fly, so Bird is a poor design. instead, separate fly behaviour into a Flyable interface.
  • ISP: ] A multi-function printeder that requires you to implement printed, scan, and fax methods even if you only need printed forces clients to depend on unused methods. Break it into separate interfaces for each capacity.
  • DIP: ] instead of a developer directly wiring a shift to a bulb, they wire it to a socket (abstraction). The bulb plugs into the socket. Both the shift and the bulb depend on the socket standard, not on each other.

2- عمليات إعادة التصنيع باليد

(أ) أن يقدموا قنبلة شفرة مصممة بطريقة سيئة (وهو نوع واحد يقوم بالكثير، ووصلات وصل كبيرة، وأجهزة إعالة ملموسة) وأن يطلبوا من صغار السن إعادة تصنيعها خطوة خطوة، مثلاً أن يبدأوا بفئة التي تتساءل عن قاعدة بيانات، وشكلات HTML، وترسل رسالة إلكترونية، وتسألهم عن تقسيمها إلى [FactT:1]، [التعديل]

3- التعلم الإضافي: مبدأ واحد في وقت

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

4 - استخدام المعونات الافتراضية والرسوم البيانية

يمكن أن تساعد رسومات الصف الأول في العلاقات البصرية، رسم مخطط "قبل" يظهر صفاً أحادياً مع العديد من الأسهم لمختلف المعالين، ورسم بياني "الأفضل" مع فصول أقل مسؤولية واحدة تعتمد على الوصلات البينية، واستخدام لوحة بيضاء أو أداة مثل

5- الاندماج في استعراضات المدونة

"إن استعراضات المدونة هي البيئة المثالية لتعزيز "سولايد" عندما نستعرض طلب سحب المطور الصغير، نشير إلى انتهاكات محددة بشكل سليم، على سبيل المثال: "هذه المجموعة تُحمّل البيانات، وتكتبها إلى مركز سي سي سي سي، وهذا هو ثلاثة مسؤوليات، ماذا لو أردنا تغيير شكل الإنتاج لاحقاً؟"

6- دورات البرمجة الخاصة

ويدير أحد المطورين المبتدئين الذي يُعدّى في اليوم 30 إلى 60 دقيقة، وفي أثناء الدورة، يستطيع كبير المتعلمين أن يُقرّر قرارات التصميم: " أنا أجعل هذه التبعية واجهة لنتبادل التنفيذ فيما بعد " ، ويمكن للصغير أن يطرح الأسئلة ويحاول التحركات، والبرمجة العادلة فعالة بوجه خاص بالنسبة لمبدأ تحويل الإعالة لأنها غالبا ما تنطوي على التقلص وراء الوصلات البينية والارتقاء بالقراءات.

الشلالات المشتركة عندما تُعلم (سولايد)

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

أعمال الهندسة فوق سطح الأرض

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

سوء فهم مبدأ ليسكوف

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

تحويل الإعالة إلى حقن الإعالة

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

أمثلة على المدونة العملية (في حالة السحب الكامل)

بينما لا يمكننا أن ندمج الرموز مباشرة، يمكننا وصف التغييرات الرمزية بوضوح، وينخفض عدد الدمى الممتحنة مثل الـ(بايتون) لتوضيح إعادة تصنيعها لـ (إس بي) و(أوب)

مسابقات برنامج التدريب قبل

contains methods , , . This violates SRP because changing the email format forces changes to InvoiceService, even if the calculation logical is correct. Solution: create , , and [FL.

OCP Example before

has a method with if-else for "rectangle", "circle", etc. Adding a new shape requires modifying the if-else block. OCP violation. Solution: create an abstract class with a method . Subclasses override [24]

DIP Example before

has a field . This is a concrete dependency; to use a different email provider, you must edit OrderService. Apply DIP by making ] depend on an ]]] and inject the implementation via constructor. Now both high-level-Seractione).

تعبئة الموارد الخارجية

فالتعلّم لا يتوقف بعد حلقة عمل، إذ يُشار إلى صغار السن على درجة عالية من الجودة حتى يتمكنوا من مواصلة التعلم بشكل مستقل، وهنا توجد بضعة مصادر جديرة بالثقة:

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

قياس التقدم

كيف تعرف إذا كان تعليمك فعالاً؟

  • المطورون المبتدئون يُعيدون طوعاً إصدار مدونة قبل تقديم الحد من الفقر.
  • يبدأون باستخدام كلمات مثل "السوء" و "الوجه" و "الاحتفاظ" في المناقشات
  • ويتناقص عدد طلبات التغيير في استراتيجيات الحد من الفقر المتصلة بانتهاكات التصميم بمرور الوقت.
  • ويمكنهم أن يشرحوا لماذا اتخذوا خيار تصميمي معين باستخدام مصطلحات SOLID.

دورتين توجيهيتين عاديتين، حيث تعيدين النظر في أعمالهما الأخيرة وتسألين "هل هذه الصفة أبسط؟" يمكن أن تعزز التعلم،

الأسئلة المتكررة من المطورين المبتدئين

هل عليّ دائماً أن أتبع (سولايد)؟

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

هل من الجيد أن يكون لديك صف "مُنَقِر" يُفسد العديد من الصفوف الأصغر؟

إن التنسيج مسؤولية مشروعة، طالما أن سبب تغيير درجة المدير هو كيفية تنسيق العناصر الفرعية (ليس منطق كل عنصر) فلا بأس، فعلى سبيل المثال، يقوم ] بتوصيل خدمة الفواتير وخدمة الدفع وخدمة الإخطارات، إذا تغيرت عملية العمل، تعدّل المقسم، وكل خدمة فرعية لها شطرنج خاص بها.

هل يمكنني استخدام برنامج (سولايد) في البرمجة الوظيفية؟

وقد عُرِّفت المنظمة الدولية للتضامن مع الأطفال في وضعهم في الاعتبار، ولكن المبادئ المماثلة تنطبق في البرمجة الوظيفية، فعلى سبيل المثال، فإن وظيفة النقي مماثلة لفئة ذات نظام غير مباشر، وهي تؤدي شيئا واحدا، وكثيرا ما يترجم تحويل الإعالة إلى وظائف عابرة كبارامترات (حقنة السلوك المستقل).

بناء ثقافة SOLID

تعليم (سولايد) ليس حدثاً لمرة واحدة، يتطلب دمج المبادئ في سير عمل الفريق،

  • Definition of Done: ] Include "code follows SOLID principles where applicable" as a check.
  • Refactoring Hours:] Dedicate Friday afternoons to refactoring legacy code with SOLID violations.
  • Book Club: ] Read "Clean Code" or "Head First Design Patterns" together and discuss SOLID in context.
  • Champions:] Identify two or three team members (including motivated juniors) who become go-to experts on SOLID.

خاتمة

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