SOLID হচ্ছে আলাদা আলাদা ৫ টি নীতিকে একত্রিত করে গঠিত একটি object-oriented design principle.
SOLID principles মেনে code লিখলে code আরও flexible এবং maintainable হবে।
SOLID কে ভাঙলে আমরা নিন্মলিখিত উপাদান গুলো পাই।

S = Single Responsibility
O = Open/Close
L = Liskov’s Substitution
I = Interface Segregation
D = Dependency Inversion

Single Responsibility

A class should have only one reason to change. এর মানে হচ্ছে একটি class দিয়ে একাধিক কাজ করা যাবে না, একটি class এর শুধুমাত্র নির্দিষ্ট কাজ থাকবে, এর মানে দাঁড়ালো আপনি একটি নির্দিষ্ট কারনেই ঐ class কে modify করতে পারবেন।

Open/Close

Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification. এর মানে হচ্ছে আপনি আপনার class কে এমন ভাবে design করবেন যেন সেটিকে modify না করেই সেটিতে নতুন feature যুক্ত করা যায়। এটা অনেকটা Decorator design pattern এর মত।

Liskov’s Substitution

Derived classes must be substitutable for their base classes. আপনি যদি কোন class কে extend করেন এবং child class যদি parent class এর কোন method কে overwrite করে তাহলে parent class ঐ method এর জন্য যে datatype return করেছিল child class এর method কেও ঐ datatype return করতে হবে।

Interface Segregation

No client should be forced to depend on methods it does not use. একটি interface এর সবগুলি method যদি কোন ক্লাস এর প্রয়োজন না হয় তাহলে সেটি ঐ class এ ব্যবহার করা যাবে না।

Dependency Inversion

High-level modules should not depend on low-level modules. Both should depend on abstractions. ধরুন আপনি একটি class (High-level modules) ব্যবহার করছেন যেটি instantiate করার জন্য আপনাকে অন্য একটি class (low-level modules) dependency হিসেবে inject করতে হবে, সেক্ষেত্রে আপনি সেই class এর নাম type hinted না করে সেই class এর interface (abstractions) কে dependency হিসেবে ব্যবহার করুন।

Source code: https://github.com/sourovroy/solid-principles-php

আমার কথাগুলোর মধ্যে কোন ভুল থাকলে অবশ্যই ধরিয়ে দিবেন।