SOLID مجموعهای از ۵ اصل بنیادین طراحی شیگرا است که هدف آنها:
ساخت نرمافزاری است که قابل توسعه، قابل نگهداری، تستپذیر و پایدار باشد.
این اصول توسط Robert C. Martin (Uncle Bob) معرفی شدهاند و امروزه ستون فقرات طراحی حرفهای در سیستمهای بزرگ محسوب میشوند.
در پروژههای واقعی معمولاً این مشکلات را دیدهایم:
- هر تغییر کوچک، چند جای سیستم را میشکند
- کلاسها بیش از حد بزرگ و پیچیدهاند
- تستنویسی سخت یا غیرممکن است
- وابستگیها درهمتنیدهاند
- اضافه کردن قابلیت جدید = ترس از خراب شدن سیستم
SOLID آمده تا این مشکلات را ریشهای حل کند.
SOLID فقط مجموعهای از قوانین نیست؛ بلکه یک طرز فکر طراحی است:
| هدف | نتیجه |
|---|---|
| کاهش وابستگی | تغییر راحتتر |
| افزایش انتزاع | توسعهپذیری |
| تفکیک مسئولیتها | نگهداری آسان |
| قراردادهای شفاف | رفتار قابل پیشبینی |
- هر کلاس دقیقاً چه کاری باید بکند؟
- چطور بدون تغییر کدهای موجود، قابلیت جدید اضافه کنیم؟
- چطور کلاسهای فرزند را امن طراحی کنیم؟
- چطور اینترفیسها را تمیز و کوچک نگه داریم؟
- چطور وابستگیها را قابل تعویض کنیم؟
پاسخ اینها در ۵ اصل SOLID نهفته است.
| حرف | اصل | مفهوم ساده | لینک |
|---|---|---|---|
| S | Single Responsibility | هر کلاس فقط یک مسئولیت | https://github.com/aieghbal/solid-principles/blob/main/single-responsibility-principle.md |
| O | Open–Closed | توسعه بدون تغییر | https://github.com/aieghbal/solid-principles/blob/main/open-closed-principle.md |
| L | Liskov Substitution | جایگزینی امن | https://github.com/aieghbal/solid-principles/blob/main/liskov-substitution-principle.md |
| I | Interface Segregation | اینترفیسهای کوچک | https://github.com/aieghbal/solid-principles/blob/main/interface-segregation-principle.md |
| D | Dependency Inversion | وابستگی به انتزاع | https://github.com/aieghbal/solid-principles/blob/main/dependency-inversion-principle.md |
| معمولی | حرفهای |
|---|---|
| کد کار میکند | کد قابل رشد است |
| سریع مینویسد | پایدار طراحی میکند |
| امروز را میبیند | آینده را پیشبینی میکند |
SOLID همان چیزی است که تو را از سطح «کدنویس» به «طراح سیستم» میبرد.
در فایلهای بعدی:
- هر اصل را جداگانه
- با مثال واقعی (Laravel)
- با سناریوی پروژهای
بررسی میکنیم تا بتوانی SOLID را در دنیای واقعی استفاده کنی، نه فقط در تئوری.
اگر این مقدمه را خوب درک کنی، بقیه SOLID برایت کاملاً منطقی و لذتبخش خواهد بود 💡