آموزش اصول SOLID در سی شارپ

آموزش اصول SOLID در سی شارپ
آموزش اصول SOLID در سی شارپ

اصول Solid چیست؟

اصول Solid در سی شارپ از اصول اولیه طراحی هستند. SOLID مجموعه ای از توصیه های طراحی برای ایجاد نرم افزار قابل اعتماد، قابل درک، انعطاف پذیر و قابل نگهداری است.

اصول SOLID توسط مربی و نویسنده علوم کامپیوتر رابرت سی. مارتین (گاهی اوقات "عمو باب" نامیده می شود) در سال 2000 توسعه یافت و به سرعت به یکی از اصلی ترین اجزای طراحی مدرن شی گرا (OOD) تبدیل شد. مخفف SOLID زمانی رایج شد که این اصول در دنیای برنامه نویسی محبوبیت گسترده ای پیدا کردند. در حال حاضر، SOLID هم در توسعه چابک و هم در توسعه نرم افزار تطبیقی پذیرفته شده است.

SOLID مخفف پنج اصل زیر است:

  • Single Responsibility Principle (اصل مسئولیت واحد)
  • Open closed Principle (اصل باز و بسته بودن)
  • Liskov substitution principle (اصل جایگزینی لیسکوف)
  • Interface Segregation Principle (اصل جداسازی اینترفیس)
  • Dependency Inversion Principle (اصل وارونگی وابستگی)

توسعه دهندگان نرم افزار از اصول SOLID برای نوشتن کد تمیز استفاده می کنند.

مشکلات نرم افزاری رایج

اشکال زدایی کلاس ها با مسئولیت های بیش از حد آن ها سخت است. اتصال تنگاتنگ بین کلاس ها، افزودن ویژگی های جدید را به یک چالش تبدیل می کند و باعث نوشتن کدهای تکراری می شود.

راه حل های رایج

  • انتخاب معماری تمیز مناسب برای برنامه، به عنوان مثال MVC، 3-tier، Onion، MVP و غیره.
  • پیروی از اصول طراحی SOLID.
  • استفاده از الگوهای طراحی مناسب.

مزایای اصول SOLID چیست؟

  • قابلیت نگهداری(Maintainability)
  • تست پذیری(Testability)
  • انعطاف پذیری(Flexibility)
  • توسعه چابک(Agile development)

اصل Single Responsibility Principle یا مسئولیت واحد (SRP) در Solid

رابرت سی مارتین تعریف اصل Single Responsibility Principle یا مسئولیت واحد در SOLID را در کتاب توسعه نرم افزار چابک، اصول، الگوها و شیوه ها ارائه کرد و بعداً در نسخه سی شارپ کتاب اصول، الگوها و تمرینات چابک در سی شارپ دوباره منتشر شد.

اصل Single Responsibility Principle یا مسئولیت واحد در SOLID توصیه می کند که "هر ماژول نرم افزاری باید تنها یک دلیل برای تغییر داشته باشد". این بدان معنی است که هر کلاس یا ساختار مشابه در کد شما فقط یک کار برای انجام دارد و نباید مانند یک چاقوی سوئیسی چند کار را انجام دهد. وقتی کلاس‌ها کوچک‌تر هستند و حاوی کدهای پاک‌تر هستند، نگهداری آن آسان‌تر است و اگر یک قسمت از سیستم خود را تغییر دهیم، نیازی به ایجاد چندین تغییر دیگر نداریم، زیرا بخشی که تغییر داده‌ایم تنها مسئول یک واحد است. چیز.

در اصطلاح عامیانه، این بدان معنی است که یک کلاس نباید با مسئولیت های متعدد بارگذاری شود و یک مسئولیت واحد نباید در چندین کلاس پخش شود یا با مسئولیت های دیگر مخلوط شود. دلیل آن این است که تغییرات بیشتری در آینده درخواست می شود و در کلاس باید تغییرات بیشتری اعمال شود.

اگر یک کلاس فقط یک مسئولیت داشته باشد، احتمالاً بسیار قوی خواهد بود و بررسی عملکرد آن طبق منطق تعریف شده آسان است. همچنین تغییر در کلاس آسان است زیرا مسئولیت واحد دارد.

اصل  Single Responsibility Principle در SOLID یک مزیت دیگر را به همراه دارد. کلاس‌ها، اجزای نرم‌افزار و ماژول‌هایی که فقط یک مسئولیت دارند، توضیح، پیاده‌سازی و درک آن ها بسیار آسان‌ تر از آنهایی هستند که برای همه چیز راه‌ حل می‌دهند.

این همچنین تعداد باگ ها را کاهش می دهد و سرعت توسعه را بهبود می بخشد و از همه مهمتر زندگی توسعه دهنده را بسیار آسان تر می کند.

مشکلات رایج  عدم استفاده از اصل Single Responsibility Principle یا مسئولیت واحد (SRP) در Solid چیست؟

  • درک و حفظ کد دشوار است
  • تست عملکردها دشوار است و توسعه تست محور را تسهیل نمی کند
  • احتمال تکرار کد بالا

مزایای استفاده از اصل Single Responsibility Principle یا مسئولیت واحد (SRP) در Solid چیست؟

  • اگر یک عملکرد واحد خراب شود، به راحتی می دانیم که کدام کلاس دارای اشکال است.
  • درک و پیاده سازی کلاس ها بسیار ساده تر از کلاس هایی با چند عملکرد خواهد بود.
  • ما به راحتی می توانیم رفتار یک تابع را با ویرایش تک کلاسی که مسئول آن است تغییر دهیم.

اصل Open closed Principle یا اصل باز و بسته(OCP) در Solid چیست؟

اصل Open closed Principle یا اصل باز و بسته بودن در SOLID توصیه می کند که "یک ماژول یا کلاس نرم افزار باید برای توسعه باز و برای اصلاح بسته باشد". این بدان معناست که برای نیازهای جدید، ماژول های نرم افزار را با رفتارهای جدید گسترش می دهیم و نباید کد موجود را به جز رفع اشکال تغییر دهیم.

برتراند مایر عموماً به دلیل ابداع تعریف اصل باز و بسته بودن در SOLID در کتاب ساخت نرم افزار شی گرا شناخته می شود.

این اصل نشان می دهد که کلاس باید به راحتی گسترش یابد اما نیازی به تغییر پیاده سازی های اصلی آن نیست.

برنامه یا نرم افزار باید برای تغییر انعطاف پذیر باشد. نحوه اجرای مدیریت تغییر در یک سیستم تأثیر بسزایی در موفقیت آن برنامه/نرم افزار دارد. OCP بیان می کند که رفتارهای سیستم را می توان بدون نیاز به تغییر پیاده سازی موجود آن گسترش داد.

یعنی ویژگی های جدید باید با استفاده از کد جدید پیاده سازی شوند، نه با تغییر کد موجود. مزیت اصلی پایبندی به OCP در SOLID این است که به طور بالقوه نگهداری کد را ساده می کند و خطر شکستن پیاده سازی موجود را کاهش می دهد.

مشکلات رایج عدم استفاده از اصل Open closed Principle یا اصل باز و بسته بودن در Solid چیست؟

  • افزودن ویژگی‌های جدید می‌تواند باگ‌هایی را ایجاد کند و نیاز به تست مجدد برنامه موجود و همچنین ویژگی‌های جدید دارد.
  • پیاده سازی تمام ویژگی ها در یک کلاس، تعمیر و نگهداری کلاس را بسیار سخت می کند.
  • تغییراتی که در بسیاری از ماژول‌های برنامه وجود دارد.

مزایای استفاده از اصل Open closed Principle یا اصل باز و بسته بودن در Solid چیست؟

  • نگهداری کد آسان تر است زیرا ریسک شکست اجرای موجود را کاهش می دهد.
  • احتمال کمتری برای بروز مشکلات در پایگاه کد وجود دارد.
  • اطمینان حاصل می کنید که تغییرات جدید روی والد یا هر کلاس مشتق شده دیگری تأثیر نخواهد گذاشت.

اصل Liskov substitution یا جایگزینی لیسکوف(LSP) در Solid چیست؟

اصل جایگزینی لیسکوف (LSP) در SOLID بیان می کند که "شما باید بتوانید از هر کلاس مشتق شده به جای کلاس والد استفاده کنید و از آن بخواهید بدون تغییر به همان شیوه رفتار کند". توصیه می کند که هر کلاس مشتق شده باید کاملاً با کلاس والد قابل تعویض باشد. "قابلیت جایگزینی هر نمونه ای از یک کلاس والد با نمونه ای از یکی از کلاس های فرزند آن بدون عوارض جانبی منفی".

اصل جایگزینی لیسکوف (LSP) تعریفی از یک رابطه فرعی است که زیرمجموعه رفتاری نامیده می‌شود و اولین بار توسط باربارا لیسکوف در سخنرانی یک کنفرانس در سال 1987 با عنوان انتزاع داده‌ها و سلسله مراتب معرفی شد.

LSP بیان می کند که کلاس فرزند باید کاملاً قابل جایگزینی برای کلاس والد آنها باشد. اگر کلاس C از P مشتق شده باشد، C باید جایگزین P شود.

ما می توانیم با استفاده از LSP بررسی کنیم که وراثت در کد ما به درستی اعمال شده است یا خیر.

LSP یک اصل اساسی از اصول SOLID است و بیان می کند که اگر برنامه یا ماژول از کلاس پایه استفاده می کند، کلاس مشتق شده باید بتواند کلاس پایه خود را بدون تغییر پیاده سازی اصلی خود گسترش دهد.

مشکلات رایج عدم استفاده از اصل Liskov substitution یا جایگزینی لیسکوف در Solid چیست؟

  • شکست پلی مورفیسم کد مشتق شده غیر قابل تعویض
  • معمولاً کد کلاینت انتظار دارد که کلاس های فرزند قابل جایگزینی با کلاس های پایه خود باشند
  • استفاده از دستورهای if-then یا switch برای حل مشکلات قابلیت جایگزینی ، تعمیر و نگهداری را سخت تر می کند

مزایای استفاده از اصل Liskov substitution یا جایگزینی لیسکوف در Solid چیست؟

  • کد غیر قابل جایگزینی چندریختی یا پلی مورفیسم را نقض می کند
  • امکان استفاده صحیح از پلی مورفیسم را فراهم می کند

اصل Interface Segregation Principle یا جداسازی اینترفیس ها(ISP) در Solid چیست؟

اصل تفکیک اینترفیس یا Interface Segregation Principle در Solid بیان می کند که کلاینت ها نباید مجبور به پیاده سازی اینترفیس هایی شوند که استفاده نمی کنند. بنابراین به جای اینترفیس های بزرگ، بهتر است چندین اینترفیس کوچک ایجاد کنید تا به بهترین شکل ممکن از آنها استفاده شود.

اصل ISP در SOLID اولین بار توسط رابرت سی مارتین در حین مشاوره برای زیراکس استفاده و فرموله شد.

اصل تفکیک اینترفیس برای حل مشکل طراحی برنامه مورد نیاز است. وقتی همه کارها توسط یک کلاس انجام می شود یا به عبارت دیگر تقریباً در همه کلاس های کاربردی از یک کلاس استفاده می شود، آنگاه آن کلاس به یک کلاس سنگین تبدیل می شود. به ارث بردن از چنین کلاسی منجر به داشتن متدهای می شود که مربوط به کلاس های مشتق شده نیستند اما در کلاس پایه وجود دارند تا در کلاس مشتق شده ارث بری کنند.

با استفاده از ISP، ما می توانیم برای هر عملیات یا به جای داشتن یک کلاس واحد برای انجام همان کار، اینترفیس های جداگانه ایجاد کنیم.

مشکلات رایج عدم استفاده از اصل Interface Segregation Principle یا جداسازی اینترفیس ها در Solid چیست؟

  • وابستگی بیشتر به معنای کوپلینگ بیشتر، کد شکننده تر و تست بیشتر است
  • نقض تفکیک اینترفیس ها منجر به کلاس هایی می شود که به چیزهایی بستگی دارند که آنها به آنها نیاز ندارند.
  • باعث کاهش انعطاف پذیری هنگام افزودن ویژگی های جدید و قابلیت نگهداری می شود

مزایای استفاده از اصل Interface Segregation Principle یا جداسازی اینترفیس ها در Solid چیست؟

  • Abstraction با نشان دادن ضروری ترین جزئیات یک شی از طریق یک اینترفیس، امنیت برنامه را افزایش می دهد
  • یک کلاس می تواند چندین اینترفیس را که با کاما از هم جدا می شوند را پیاده سازی کند
  • یک اینترفیس به عنوان یک قرارداد عمل می کند که کلاس ها را مجبور به پیاده سازی تمام متد ها می کند.

اصل Dependency Inversion Principle یا وارونگی وابستگی(ِDIP) در Solid چیست؟

اصل Dependency Inversion Principle یا وارونگی وابستگی (DIP) در Solid بیان می‌کند که ماژول‌ها/کلاس‌های سطح بالا نباید به ماژول‌ها/کلاس‌های سطح پایین وابسته باشند. هر دو باید به انتزاعات بستگی داشته باشند. ثانیاً، انتزاعات نباید به جزئیات بستگی داشته باشند. جزئیات باید به انتزاعات بستگی داشته باشد.

این اصل می گوید که ماژول های سطح بالا باید به انتزاع بستگی داشته باشند، نه به جزئیات یا ماژول های سطح پایین. به عبارت ساده، این اصل می گوید که نباید بین اجزای نرم افزار کوپلینگ محکمی وجود داشته باشد و برای جلوگیری از آن، اجزا باید به انتزاع بستگی داشته باشند.

اصطلاحات تزریق وابستگی (DI) و وارونگی کنترل (IoC) معمولاً به جای یکدیگر برای بیان یک الگوی طراحی استفاده می‌شوند. این الگو در ابتدا IoC نامیده می شد، اما مارتین فاولر (معروف به طراحی نرم افزار سازمانی) نام آن را DI پیش بینی کرد زیرا همه فریمورک ها زمان اجرا کنترل را به نوعی معکوس می کنند و او می خواست بداند کدام جنبه از کنترل معکوس شده است.

Inversion of Control (IoC) تکنیکی برای پیاده سازی Dependency Inversion Principle در سی شارپ است. وارونگی کنترل را می توان با استفاده از یک کلاس انتزاعی یا اینترفیس پیاده سازی کرد.. این تکنیک وابستگی بین موجودیت ها را حذف می کند.

مزایای استفاده از اصل Dependency Inversion Principle یا وارونگی وابستگی در Solid چیست؟

  • Abstraction با نشان دادن ضروری ترین جزئیات یک شی از طریق یک اینترفیس، امنیت برنامه را افزایش می دهد
  • یک کلاس می تواند چندین اینترفیس را که با کاما از هم جدا می شوند را پیاده سازی کند.

سرفصل های دوره آموزش رایگان اصول SOLID در سی شارپ

  • آموزش و پیاده سازی عملی اصل Single Responsibility Principle یا مسئولیت واحد(SRP) از SOLID در سی شارپ
  • آموزش و پیاده سازی عملی اصل Open closed Principle یا اصل باز و بسته بودن(OCP) از SOLID در سی شارپ
  • آموزش و پیاده سازی عملی اصل Liskov substitution یا جایگزینی لیسکوف (LSP) از SOLID در سی شارپ
  • آموزش و پیاده سازی عملی اصل Interface Segregation Principle یا جداسازی اینترفیس ها(ISP) از SOLID در سی شارپ
  • آموزش و پیاده سازی عملی اصل Dependency Inversion Principle یا وارونگی وابستگی(ِDIP) از SOLID در سی شارپ

نتیجه گیری

پنج اصل Solid که در این آموزش مورد بحث قرار گرفته برای طراحی شی گرا خوب است. بیشتر اصول درگیر، اضافه کردن یک لایه انتزاع بین کلاس‌ها است. همیشه توصیه می شود هنگام نوشتن کد جدید اصول Solid را در نظر داشته باشید.

ما در این آموزش به صورت عملی نحوه استفاده از اصول SOLID در سی شارپ را به شما آموزش خواهیم داد و در پایان شما قادر خواهید بود با رعایت اصول SOLID در سی شارپ کدهای تمیزتر، قابل انعطاف تر و تست پذیر با قابلیت نگهداری بالا بنویسید.

لینک دوره: آموزش رایگان اصول SOLID در سی شارپ
کدسل- مرجع تخصصی آموزش برنامه نویسی