Designing for Change: How SOLID Principles Enable Adaptive Engineering

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

The Five SOLID Principles

SOLID is an acronym representing five core principles of object-oriented design:

  • S] - مبدأ المسؤولية الوحيدة
  • O] - Principle Open/Closed
  • L] - Liskov Substitution Principle
  • I] - مبدأ الفصل بين الأوجه
  • D] - مبدأ الإعالة

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

مبدأ المسؤولية الوحيدة

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

Example:] Consider a ReportGenerator class that both fetches data from a database and formats the output as HTML. If the data source changes (e.g., shifting from SQL to a REST API), the formatting logical remains stable - but you still must modify the same class. by splitting into DataFetcher and Htl

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

المبدأ المفتوح/المغلق

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

Example:] In a payment processing system, you might start with a single class that handles credit cards. When the business adds PayPal support, modifying the existing class risks breaking credit card logical. instead, define a interface with a method, then create separate classes

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

Liskov Substitution Principle (LSP)

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

Example:] Suposose you have a class with and ], and you create a subclass that overrides these methods to keep both dimensions equal. If code expects a

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

مبدأ الفصل بين الأوجه

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

Example: In a document management system, a ] interface might include methods like , , , , and

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

مبدأ الإعالة

وقاعدة تحويل الإعالة تتألف من جزأين رئيسيين: لا ينبغي أن تتوقف الوحدات الرفيعة المستوى على وحدات منخفضة المستوى؛ وينبغي أن يعتمد كلاهما على الخلاصات، وبالإضافة إلى ذلك، لا ينبغي أن تتوقف الخلاصات على التفاصيل؛ وينبغي أن تتوقف التفاصيل على الخلاصات، وبعبارة أخرى، تعتمد على الوصلات البينية أو الفصول المجردة بدلا من التنفيذ الملموس، وهذا يحول دون التدفق التقليدي للاعتماد في المدونة الإجرائية.

Example:] instead of a ] directly immediatelyiating a , it should depend on a ] inter- The concrete implementation is injected via constructor or setter (dependency injection). This allows you to swag the repository for different.

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

How SOLID Principles Promote Adaptability

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

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

التطبيق العملي في التنمية الحديثة

Refactoring Toward SOLID

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

SOLID and Design Patterns

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

SOLID in Test-Driven Development

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

الأفكار الخاطئة المشتركة بشأن SOLID

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

فهم المتعمد ] وراء كل مبدأ هو أكثر أهمية من التدقيق الآلي في الصناديق، اسأل نفسك: "هل يساعدني هذا التصميم على الرد على التغيير دون كسر السلوك القائم؟" إذا كان الجواب نعم، فمن المرجح أن تكون على المسار الصحيح، حتى لو لم يطابق الرمز تعريف الكتاب المدرسي.

الموارد الخارجية للتعلم الأعمق

وللمضي في استكشاف مبادئ SOLID والهندسة التكييفية، يرجى الرجوع إلى المصادر الموثوقة التالية:

خاتمة

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