تنويه: يمكن للجميع ، ولكن ما أنا أسوأ ؟!
SOLID عبارة عن مجموعة من المبادئ لتنظيم التعليمات البرمجية. في الواقع ، يعلنون عن قواعد معينة ستساعدك على توفير أعصابك ووقت الآخرين. أو قد لا تساعد.
دعونا نحاول فهم هذه المبادئ على الأصابع ، بدون أمثلة على التعليمات البرمجية ورسائل SMS.
S - مبدأ المسؤولية الفردية (SRP)
يجب أن يكون هناك سبب واحد فقط لتغيير الفئة ("يجب أن يكون للفصل سبب واحد فقط للتغيير." روبرت سي مارتن.)
تخيل أن لديك خمس أغنيات مفضلة ، زوج من الأفلام وصور قطط على جهاز الكمبيوتر الخاص بك. يمكنك إدخال كل هذا في "المستندات" ، وبشكل عام ، الاستمتاع بالحياة.
ثم تقوم بتنزيل المزيد من الأفلام وألبوم جديد لفرقتك المفضلة وعشرات القطط الجديدة. في "مستنداتي" يصبح الأمر غير مريح بطريقة أو بأخرى وتضع كل شيء من قبل الأب.
موسيقى
أفلام
الأختام
ثم تقوم بتوصيل سرعة غير محدودة ، وتخلص من الملفات وقم بتنزيل جميع سلسلة Simpsons المليئة بالتسجيلات لمجموعاتك المفضلة ، ويتم إضافة صور من رحلة صيد مع الأصدقاء إلى صور القطط. يبدأ الآباء في التفرع.
موسيقى
الأبواب
في انتظار الشمس
مرحبا انا احبك. mp3
...
...
Rhcp
أجوتين
فيديو
البرامج التلفزيونية
أفلام
استوديو خاص
صور
الأختام
صيد السمك
الأفضلية في البلد
المحظيات
وماذا لدينا هنا؟
- الموسيقى - هي المسؤولة فقط عن الموسيقى.
- The Doors - المسؤول الوحيد عن الموسيقى التي تلعبها The Doors
- في انتظار الشمس - المسؤول فقط عن الألبوم في انتظار الشمس
- Hello I Love You.mp3 - المسؤول الوحيد عن الأغنية Hello I Love You
ماذا يمكن أن يكون سبب التغيير في الأبواب؟ تغيير واحد فقط (نوعي أو كمي) في أغاني الأبواب. لكن إزالة مسلسل ممل من "/ Video / TV Series /" لا يمكن أن يكون سببًا ، تمامًا مثل إعادة تسمية "موسيقى" إلى "موسيقى".
ما هي الاستنتاجات التي يمكن استخلاصها؟
- SRP عن التحلل (مصنفة في مجلدات فرعية) والترابط ("مرحبًا ، أنا أحب You.mp3" يرتبط فقط بـ "Waiting for the Sun" ولا تهتم بالتغييرات في "../Series". من ناحية أخرى ، كل الأغاني "الأبواب" بداخلها ولا يجب أن تكون في مجلد "القطط").
- يجب ألا يكون مستوى تجريد سبب التغيير أعلى من مستوى تجريد الكيان الذي يتم تغييره. لا يمكن أن يكون إضافة مجلد "Alla Pugacheva" الفرعي إلى "Music" بأي حال من الأحوال هو سبب تغيير "Waiting for the Sun".
- لا حاجة لإحضار نقطة العبث. إذا كان لديك ثلاث أغنيات ، واحدة من الفيدوس وخمس صور للقطط ، فسوف تبدو رائعة في كومة واحدة - سيؤدي وضعها في مجلدات إلى إرباك كل شيء فقط. مثل مجموعة "The Best of The Doors" ، يجب ألا تقسمها إلى مجلدات فرعية حسب السنة ، كل منها سيكون له أغنية واحدة.
O - مبدأ مفتوح أو OCP
يجب أن تكون الكيانات البرمجية (الفئات والوحدات والوظائف وما إلى ذلك) مفتوحة للتمديد ، ولكنها مغلقة للتعديل. " برتراند ماير)
دعنا نعود إلى خطوة تاريخنا عندما تتصل بسرعة غير محدودة. لنفترض أولاً أنك قمت بضخ جميع أنواع الأفلام عن السباكين في شركة الأفلام الخاصة ، ولأنهم كانوا كلهم يتعلقون بالسباكة ، فقد أنشأوا المجلد "/ Video / About Plumbers /".
بعد مرور بعض الوقت ، قمت بتنزيل المزيد من الأفلام من هذا الاستوديو ، ولكن بالفعل حول توصيل البيتزا. علاوة على ذلك ، كتبتك فتاتك الجديدة برسالة نصية قصيرة "لقد قمت بتنزيل فيلم" أفونيا "وحفظته في المجلد / الفيديو / حول السباكين / ، حسنًا؟". ويبدو أن كل شيء على ما يرام - فيما يتعلق بالسباكة ، ولكن هناك فارق بسيط.
وهنا يتضح لك أنه من المستحيل تغيير الوظيفة دون تعديل الهيكل الحالي للمجلدات (الفئات) ، وهذا انتهاك واضح لمبدأ OCP.
كيف في هذه الحالة يجب القيام به؟ من السهل جدًا تصميم النظام مبدئيًا بحيث لا تتطلب الوظيفة الجديدة تغيير الرمز القديم. على سبيل المثال لا ترمز إلى المجلد "../Pro السباكين /" ، على أمل أن يكون هناك في المستقبل فقط عنهم ، ولكن زيادة مستوى التجريد إلى "../Studio Private /" وإطعامها بهدوء كل من السباكين ورجال توصيل البيتزا ، إلخ. -أخرى ...
وبالنسبة لـ Afoni ، قم بإنشاء فصل جديد ، على سبيل المثال ، "../Mosfilm/" ، قم بتوسيع الفصل "/ Video /"
الاستنتاجات:
- فكر مسبقًا فيما ستفعله إذا ظهرت أفلام "أخرى" عن السباكين. ربما يجب أن تفعل ذلك في ذهنك على الفور حتى لا تعيده لاحقًا؟
- يتعلق هذا المبدأ بشكل أساسي بالطبقات المجردة ("../Studio Private /").
لام - باربرا Liskov مبدأ الاستبدال أو LSP
يجب أن تكون الكائنات في البرنامج قابلة للاستبدال بمثيلات لأنواعها الفرعية دون تغيير التنفيذ الصحيح للبرنامج.
حسنًا ، الأمر بسيط جدًا هنا.
للحصول على شرح ، دعنا ننتقل إلى الحلاوة والدعاية ، وتحديدا إلى المجلد "/ Photo / Seals /".
نحن نحب القطط وجمعنا الكثير من الصور.
صور
الأختام
حمر الشعر
مخطط
رطب
أسود
مانولا
يحدث أننا حتى نطلق مباشرة عرض شرائح عبر المجلد الجذر بأكمله ونعجب به. وهكذا ، في لحظة رائعة ، عندما تصل إلى السكينة تقريبًا ، تعرض الشاشة:
غير قادر على عرض الملف "/ Photo / Seals / Books / Puss in Boots.fb2"
كما اتضح لاحقًا ، قرر صديقك رفع درجة الجاذبية ورث "الأختام" بمجلد فرعي جديد لـ "الكتاب" ، بعد أن انتهك بشكل صارخ LSP ، حيث لا يمكن استخدام الفئة الفرعية "Books" بدلاً من الفئة الأساسية "Photo".
الاستنتاجات:
- الاسم مخيف ، التعريف معقد ، لكن المبدأ نفسه بسيط وبديهي.
- إذا كانت طريقتك تتوقع دخول "صورة" ، فلا يهم أي وريث من "صورة" تزعجه: "Manuli" أو "Redheads" أو "Wet" ، ولكن إذا ظهرت "Books" ، كان من المتوقع أن يختنق على الشاي.
I - مبدأ فصل الواجهة أو ISP
يجب ألا يعتمد العملاء على الأساليب التي لا يستخدمونها.
هنا سيكون من الصعب شرح المجلدات والملفات ، لكنني سأحاول - لا تحكم بدقة على بعض التوتر.
لقد سئمت من مشغل الموسيقى القياسي وقررت تنزيل مشغل جديد عصري ورائع. إنه يعرف حتى كيفية عرض غلاف ألبوم موسيقي وعرض ترجمات لأغنية تم تأديتها. لكن المشكلة هي ، إذا لم يكن ملفا "الغلاف. jpg" و "الترجمات المصاحبة" في مجلد الألبوم ، فإن المشغل يتعطل بخطأ. والآن ، عن طريق شتم كل شيء في العالم ، تبدأ في إنشاء هذه الملفات الجذرية في جميع المجلدات الفرعية باستخدام الألبومات.
أي ، برسم قياسات غير صحيحة ، ألزمنا فئة الموسيقى وجميع ورثتها بتنفيذ واجهة AudioCoverSubtitles. في نفس الوقت ، تطبق هذه الواجهة بالكامل فقط الألبوم "Waiting for the Sun" ، والألبوم "The Best of The Doors" ينفذ فقط الجزء "Audio + Cover" ، والباقي فقط "Audio".
هذا يقودنا إلى فكرة أنه من المنطقي تقسيم واجهة AudioCoverSubtitles السميكة إلى ثلاث ملفات صوتية صغيرة وتغطية وترجمات واستخدامها فقط عند الحاجة إليها حقًا.
الاستنتاجات:
- فجأة ، ISP يدور حول فصل الواجهات.
- إذا أجبرتك الواجهة على إنشاء طرق كعب الروتين ، فهذه واجهة سيئة ويجب عليك تجاوزها بالمقص.
د - مبدأ انعكاس التبعية أو DIP
لا يجب أن تعتمد وحدات المستوى الأعلى على وحدات المستوى الأدنى. يجب أن يعتمد كلا النوعين من الوحدات على التجريد.
لا يجب أن تعتمد التجريد على التفاصيل. يجب أن تعتمد التفاصيل على التجريد.
لا يجب أن تعتمد وحدة "الأبواب" على نوع الملفات الصوتية التي تحتوي عليها أو .mp3 أو .flac أو .wav.
تعتمد وحدة الأبواب ، الوحدة الفرعية Waiting for Sun (وأي شخص آخر) ، على تجريد الموسيقى عالي المستوى ، والذي يحدد تنفيذها (حقيقة وجود موسيقى في الداخل).
لنفترض أننا قررنا فصل تخزين الموسيقى وفقًا لمبدأ الضغط - "الضياع" و "الضياع". هذه هي التفاصيل التي يجمعها الاعتماد على "الموسيقى" التجريدية - وفي النهاية يجب أن تكون هناك موسيقى. علاوة على ذلك ، فإن "الموسيقى" التجريدية نفسها لا تعتمد على هذه التفاصيل. لا تهتم إذا فقدت الموسيقى هناك أو بدونها - لأنها كانت موسيقى ، فستبقى كذلك.
الاستنتاجات:
- DIP - يتعلق الأمر بذلك ، يجب أن يعتمد على العام وليس العكس.
- DIP هو "المزيد من التجريدات لإله التجريد!"
- DIP أيضا حول الأسباب والآثار ، حول الجواب الصحيح للسؤال: "الفروع تتأرجح من حقيقة أن الرياح تهب أو تهب الرياح من حقيقة أن الفروع تتأرجح"
شكرا لك وأتمنى لك عطلة نهاية أسبوع سعيدة!