أسئلة مقابلات SOLID Principles في Software Fundamentals
9 سؤال عن SOLID Principles من مسار Software Fundamentals. اقرأ الإجابة المختصرة لكل سؤال هنا، وافتح السؤال للشرح الكامل والأمثلة والأخطاء الشائعة والمصادر.
- مبتدئ
ما هو المعنى الحقيقي لمبدأ المسؤولية الواحدة (SRP) وما هو المقياس لتحديد 'المسؤولية'؟
ينص SRP على أن الوحدة البرمجية يجب أن تمتلك سبباً واحداً فقط للتغيير، والمقياس الحقيقي هو خدمة جهة فاعلة واحدة (Single Actor) في المنظومة.
اقرأ الشرح الكامل - متوسط
كيف تطبق مبدأ الانفتاح والإغلاق (Open/Closed Principle) دون الوقوع في فخ التعقيد المفرط؟
يكون الكود مفتوحاً للتوسيع (إضافة ميزات جديدة) ومغلقاً للتعديل (دون الحاجة لتغيير الكود المجرب مسبقاً) عبر الاعتماد على الواجهات والاستراتيجيات المجردة.
اقرأ الشرح الكامل - متقدم
اشرح مبدأ استبدال لسكوف (LSP) ومفهوم الشروط المسبقة (Preconditions) واللاحقة (Postconditions) ومثال المستطيل والمربع الشهير؟
ينص LSP على أن كائنات الفئة المشتقة يجب أن تحل محل كائنات الفئة الأساسية دون تغيير صحة وسلوك البرنامج. ولا يجوز للابن تشديد الشروط المسبقة أو إضعاف الشروط اللاحقة.
اقرأ الشرح الكامل - مبتدئ
لماذا يحذر مبدأ فصل الواجهات (Interface Segregation Principle) من الواجهات الضخمة (Fat Interfaces)؟
لأنه لا ينبغي إجبار أي عميل برمجي على الاعتماد على دوال أو واجهات لا يستخدمها، مما يمنع الاقتران غير الضروري وإعادة الترجمة غير المبررة.
اقرأ الشرح الكامل - متوسط
ما هو جوهر مبدأ عكس التبعية (Dependency Inversion Principle) وكيف يختلف عن حقن التبعية (DI)؟
DIP هو مبدأ معماري يفرض أن الوحدات عالية المستوى والتفاصيل منخفضة المستوى يجب أن تعتمد كلاهما على التجريدات (Abstractions)، بينما DI هو نمط برمجي لتمرير التبعيات من الخارج.
اقرأ الشرح الكامل - متوسط
ما هو الفرق بين نمط Service Locator وحاويات حقن التبعيات (IoC Containers) ولماذا يُعتبر الأول مضاد نمط أحياناً؟
يعتمد Service Locator على استدعاء مركزي صريح من داخل الفئة لجلب التبعيات مما يخفيها، بينما يقوم DI بتمرير التبعيات علانية عبر الـ Constructor مما يجعل متطلبات الفئة واضحة وصريحة.
اقرأ الشرح الكامل - متقدم
متى يصبح تطبيق مبادئ SOLID مفرطاً وهندسة زائدة (Over-engineering) وما هي علامات رائحة الكود Speculative Generality؟
يحدث الإفراط عندما تُبنى طبقات تجريد وواجهات وسيطة لميزات غير مطلوبة بدعوى الاستعداد للمستقبل، مما يضاعف تكلفة قراءة الشفرة وصيانتها دون أي عائد حقيقي.
اقرأ الشرح الكامل - متقدم
كيف تبدأ بإعادة هيكلة كود قديم معقد (Legacy Code) ليتوافق مع مبادئ SOLID بأمان تام ودون كسر الوظائف الحالية؟
عبر تثبيت السلوك القائم أولاً باستخدام اختبارات التوصيف (Characterization Tests)، ثم إيجاد خطوط الفصل (Seams) وتفكيك التبعيات تدريجياً خطوة بخطوة.
اقرأ الشرح الكامل - متوسط
ما الفرق بين التكرار الحقيقي (True Duplication) والتكرار العرضي (Accidental Duplication) ومتى يكون تكرار الكود أفضل من التجريد الخاطئ؟
التكرار الحقيقي يحدث عندما يتطابق المنطق والسبب في التغيير، بينما التكرار العرضي هو تشابه في الشكل السطحي لكود يخدم جهتين فاعلتين مختلفتين ستتغير متطلباتهما بشكل مستقل مستقبلاً.
اقرأ الشرح الكامل