SOLID :
یک مجموعهی اصول طراحی شیءگرا است که برای ساختاردهی بهتر و قابل گسترشتر کردن کد، معرفی شده است. این اصول، به صورت خلاصه به صورت زیر هستند:
هر کلاس باید فقط یک مسئولیت داشته باشد و باید تنها به یک دلیل برای تغییر مورد نیاز باشد.
کد باید برای تغییرات بسته باشد ولی برای افزودن قابل باز باشد.
هر شیء از یک کلاس، باید بتواند به عنوان یک شیء ازکلاس پدرش استفاده شود، بدون اینکه برنامه تغییر کند.
کلاسها نباید از روشهایی که نیاز ندارند استفاده کنند و نباید به کلاسهای دیگر وابسته باشند.
باید به جای وابستگی به جزئیات پیادهسازی، به ابسترکشنها و رابطها وابسته باشیم و وابستگیهای بین کلاسها را به صورتی طراحی کنیم که برای تغییرات کمتری در کد نیاز باشد.
اصول SOLID به صورت جداگانه و در کنار یکدیگر، به ما کمک میکنند که کدی را را طراحی کنیم که قابلیت گسترش و تغییرات بیشتری داشته باشد و عملکرد بهتری داشته باشد. در ادامه، به توضیح هر یک از این اصول میپردازیم:
این اصل بیان میکند که هر کلاس فقط باید یک مسئولیت داشته باشد. به این صورت که هر کلاس باید فقط برای یک کار خاص طراحی شود و اگر برای کار دیگری نیاز به تغییرات داشته باشد، باید از آن کلاس جدا شود. به طور مثال، در یک برنامه مدیریت فروشگاه، دو کلاس مجزا برای مدیریت محصولات و مدیریت سفاردهی باید طراحی شوند، به جای آنکه هر دو مسئولیت در یک کلاس قرار داشته باشد.
این اصل بیان میکند که کد باید برای تغییرات بسته باشد ولی برای افزودن قابل باز باشد. به این صورت که باید بتوانیم قابلیتهای جدید به برنامه خود اضافه کنیم، بدون اینکه کد قبلی را تغییر دهیم. به طور مثال در یک برنامه بازی، باید بتوانیم شخصیتهای جدید را به بازی اضافه کنیم، بدون اینکه کد اصلی بازی را تغییر دهیم.
این اصل بیان میکند که هر شیءاز یک کلاس، باید بتواند به عنوان یک شیء از کلاس پدرش استفاده شود، بدون اینکه برنامه تغییر کند. به عبارت دیگر، باید بتوانیم شیءهای جدید را به برنامه خود اضافه کنیم، بدون اینکه تغییراتی در برنامه اصلی ایجاد شود. به طور مثال، در یک برنامه مدیریت حساب بانکی، باید بتوانیم بدون تغییر کد اصلی، حسابهای جدید را به برنامه اضافه کنیم.
این اصل بیان میکند که کلاسها نباید از روشهایی که نیاز ندارند استفاده کنند و نباید به کلاسهای دیگر وابسته باشند. به عبارت دیگر، باید روشهایی که برای کاری لازم نیستند، در کلاسها قرار نگیرند و هر کلاس فقط به آن چیزی که نیاز دارد، وابسته باشد. به طور مثال، در یک برنامه مدیریت فروشگاه، کلاس مدیریت محصولات نباید از روشهایی که برای سفارشها نیاز داریم استفاده کند.
این اصل بیان میکند که باید به جای وابستگی به جزئیات پیادهسازی، به ابسترکشنها و رابطها وابسته باشیم و وابستگیهای بین کلاسها را به صورتی طراحی کنیم که برایتغییرات کمتری در کد نیاز باشد. به عبارت دیگر، باید به جای استفاده از قطعات کد و جزئیات پیادهسازی، از رابطها و ابسترکشنها استفاده کنیم تا بتوانیم وابستگیهای بین کلاسها را به صورت مناسبی طراحی کنیم. به طور مثال، در یک برنامه مدیریت سفارشها، باید از رابطها برای ارتباط بین کلاسهای مدیریت محصولات، مدیریت مشتریان و مدیریت پرداختها استفاده کنیم.