اصول SOLID مجموعهای از اصول طراحی هستند که در توسعه نرمافزار شیءگرا به کار میروند. این اصول شامل یگانگی مسئولیت، باز-بسته، جانشینی لیسکوف، تفکیک رابطها، و وارونگی وابستگی هستند. استفاده از این اصول معمولاً باعث بهبود قابلیت خوانایی، تعمیر و توسعه کد میشود. در ادامه به معرفی هر کدام از این پنج اصل میپردازیم.
اصل یگانگی مسئولیت (SRP – Single Responsibility Principle):
هر کلاس باید یک وظیفه و مسئولیت مشخص داشته باشد و این مسئولیت باید تنها به یک دلیل تغییر کند. این اصل جلوی ارتباط مستقیم بین مسئولیتهای مختلف را میگیرد.
اصل باز-بسته (OCP – Open/Closed Principle):
برنامه باید باز برای توسعه و بسته برای تغییرات باشد. این به این معناست که میتوانیم توسعه دهیم (باز) بدون این که بخشهای موجود تغییر کنند (بسته).
اصل جانشینی لیسکوف (LSP – Liskov Substitution Principle):
زمانی که یک کلاس از یک کلاس پایه (سوپرکلاس) ارثبری میکند، باید بدون ایجاد مشکلات در برنامه، بهجای سوپرکلاس قابل استفاده باشد.
اصل تفکیک رابطها (ISP – Interface Segregation Principle):
کلاسها نباید روابطی را که از آنها استفاده نمیکنند، به اجبار پیادهسازی کنند. به عبارت دیگر، هر کلاس باید تنها دارای روابطی باشد که به آن نیاز دارد.
اصل وارونگی وابستگی (DIP – Dependency Inversion Principle):
برنامه باید به گونهای باشد که ماژولهای بالاتر به ماژولهای پایینتر وابسته باشند. این اصل تغییر ماژولهای پایینتر را بدون تغییر در ماژولهای بالاتر ممکن میسازد.
کاربرد solid
اصول SOLID در توسعه نرمافزار به عنوان راهنمایی برای ساختاردهی کد و ارتقاء کیفیت نرمافزار استفاده میشوند. کاربردهای این اصول عبارتند از:
افزایش قابلیت خوانایی
استفاده از اصول SOLID باعث میشود که ساختار کد شفافتر و خواناتر باشد. این امر به توسعهدهندگان کمک میکند تا کد را بهبود بخشند و از آن به راحتی استفاده کنند.
کاهش پیچیدگی
اصول SOLID باعث میشوند تا هر کلاس یا ماژول فقط یک مسئولیت داشته باشد. این موضوع کاهش پیچیدگی کد را تسهیل میکند و نگهداری و توسعه آن را سادهتر میسازد.
استفاده مجدد
با رعایت اصول SOLID، کد به شکلی طراحی میشود که اجزای مختلف بهراحتی قابل استفاده مجدد باشند. این اصول منجر به افزایش بهرهوری و کاهش زمان توسعه میشود.
سهولت در تست
ساختار کدی که از اصول SOLID پیروی میکند، به راحتی تست و اعتبارسنجی میشود. به این صورت کاهش احتمال ایجاد باگها و افزایش اطمینان از عملکرد صحیح نرمافزار فراهم میشود.
توسعهپذیری
اصول SOLID به توسعهدهندگان این امکان را میدهند که نرمافزار را به سهولت توسعه دهند. اضافه کردن ویژگیها و تغییرات در کد با کمترین تأثیر بر سایر بخشها امکانپذیر است.
به طور کلی، استفاده از اصول SOLID به توسعه نرمافزار کمک میکند تا کد مقرون به صرفهتر، قابلیت توسعه بیشتر و سازماندهی مناسبتری داشته باشد.
معایب اصول سالید
برخی از معایب اصول سالید به صورت زیر هستند:
- پیچیدگی اضافی: در بعضی موارد، رعایت اصول SOLID ممکن است منجر به افزایش تعداد کلاسها و رابطها شود که ممکن است برخی افراد این امر را پیچیده تلقی کنند.
- نیاز به آموزش: توسعهدهندگان نیاز به آموزش و درک صحیح از اصول SOLID دارند تا بتوانند به درستی از آنها استفاده کنند. به این صورت ممکن است وقت زیادی از فرد گرفته شود تا این اصول به خوبی درک شده و به کار گرفته شوند.
- هزینه زمانی: اجرای اصول SOLID ممکن است هزینه زمانی اضافی برای توسعه کد به همراه داشته باشد. به طور خاص، در ابتدا ممکن است زمان بیشتری برای طراحی و توسعه نیاز باشد.
در کل، استفاده از اصول SOLID با توجه به مزایا و معایب آنها و نیازهای پروژه، به تصمیم گیری بر اساس شرایط خاص بستگی دارد.
مثالهایی از اصول سالید
در ادامه به بررسی مثالهایی ساده از اصول سالید میپردازیم. مثالها بسیار ساده هستند و هدف آنها توضیح مفهومی از هر اصل SOLID است.
- اصل یگانگی مسئولیت (SRP – Single Responsibility Principle):
یک کلاس مدیریت کارمندان (EmployeeManager) که فقط وظیفه محاسبه حقوق را دارد، وظیفه دیگری مثل ذخیرهسازی در پایگاه داده را نداشته باشد.
- اصل باز-بسته (OCP – Open/Closed Principle):
یک کلاس شکلات فروشی (ChocolateShop) که برای اضافه کردن نوع جدیدی از شکلات، اقدام به ارثبری از یک رابط باز (Open) کرده و متدهای خود را پیادهسازی میکند.
- اصل جانشینی لیسکوف (LSP – Liskov Substitution Principle):
یک سلسله مراتب از هندسه (Geometry) که شامل کلاسهای مستطیل و مربع است. هرجا مربع به عنوان یک شکل هندسی بهکار میرود، باید بتواند جایگزین مستطیل شود بدون این که تغییرات منفی ایجاد شود.
- اصل تفکیک رابطها (ISP – Interface Segregation Principle):
یک رابط کاربری (UserInterface) که دارای متدهای مختلف برای ورود به سیستم و نمایش پروفایل کاربر است. اگر یک کلاس مدیریت پروفایل فقط به نمایش پروفایل نیاز داشته باشد، از این رابط برای متد مربوط به نمایش پروفایل استفاده میکند.
- اصل وارونگی وابستگی (DIP – Dependency Inversion Principle):
یک کلاس خرید (Purchase) که بهجای وابستگی به یک کلاس پرداخت مستقیم، از یک رابط پرداخت (Payment) که توسط کلاسهای مختلفی پیادهسازی شده است، استفاده میکند. این کلاس خرید از وارونگی وابستگی برخوردار است.
در ادامه به بررسی مثالهای کدنویسی از هر کدام از اصول سالید میپردازیم.
- اصل یگانگی مسئولیت (SRP – Single Responsibility Principle)
- اصل باز-بسته (OCP – Open/Closed Principle)
- اصل جانشینی لیسکوف (LSP – Liskov Substitution Principle)
- اصل تفکیک رابطها (ISP – Interface Segregation Principle)
- اصل وارونگی وابستگی (DIP – Dependency Inversion Principle)
این مثالها به توضیح مفاهیم هر اصل SOLID کمک میکنند. البته در مثالهای واقعیتر، معمولاً با پیچیدگیها و نیازهای بیشتری مواجه میشوید.
جمع بندی
اصول SOLID یک مجموعه اصول طراحی در توسعه نرمافزار شیءگرا هستند که شامل یگانگی مسئولیت، باز-بسته، جانشینی لیسکوف، تفکیک رابطها، و وارونگی وابستگی میشوند. این اصول باعث افزایش خوانایی، کاهش پیچیدگی، افزایش قابلیت تست، امکان استفاده مجدد و توسعهپذیری کد میشوند. با اعمال این اصول، کد به شکلی ساختارمندتر و قابل نگهداریتر طراحی میشود و توسعهدهندگان را در مواجهه با تغییرات و بهبودهای آتی تسهیل میدهد.
اگر به یادگیری برنامه نویسی و فعالیت در این حوزه علاقه دارید، توصیه میشود حتما در دورههای آموزشی مفید و معتبر شرکت نمایید. بوت کمپ برنامه نویسی مپصا اچ آر برگزار کننده دورههای کاربردی به صورت کاملا حرفهای است و پس از گذراندن این دورهها برای ورود به بازار کار آشنا میشوید.