SOLID اصول

 

:Single responsibility

.باید تنها یک مسئولیت داشته باشد و از انجام کار های مختلف و نا مرتبط در یک کلاس باید پرهیز کرد entity هر کلاس یا

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

:Open / Closed Principle (OCP)

.(‌close for modification) و برای تغییر دادن بسته باشند ( open for extension )کلاس ها باید برای توسعه دادن باز

.جدیدی اضافه کنیم، باید بتوانیم این کار را به راحتی انجام دهیم ولی کلاس های موجود دچار کم ترین تغییر شوند feature یعنی اگر بخواهیم نوع یا

:Liskov Substitution Principle (LSP)

.کلاس فرزند باید به طور کامل تمام ویژگی ها و متد های کلاس پدر را داشته باشد و پیاده سازی کند

:Interface Segregation Principle (ISP)

.را پیاده سازی می کند،‌باید همه متد های آن را پیاده کند و همه متد ها برای آن کلاس با معنی باشند interface هر کلاسی که یک

.(قبلی است interface برای parent جدیدی خواهیم داشت ( که احتمالا interface در غیر این صورت برای کلاس مذکور نیاز به

:Dependency Inversion Principle

.و مشخص low-level باشیم تا این که به کلاس های abstract پیاده سازی باید به گونه ای باشد که تا جای ممکن وابسه به کلاس های

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

 

 

GRASP اصول

:Creator

(builder classes) .ساخت بعضی از اشیا از کلاس ها فرایند نسبتا پیچیده ای است، به همین دلیل نیاز به کلاس های مجزا برای برعهده گرفتن وظبفه ساخت این گونه کلاس ها را داریم

 

:Information Expert

.ها این کار را به آن ها بسپارند entity نیازی نیست که همه کلاس ها همه نوع کار را انجام بدهند! نیاز به کلاس هایی داریم که وظایف تخصصی را برعهده بگیرند و بقیه

…و DatabaseUtils مثلا داشتن کلاس

 

:Low Coupling

.باید تا جای امکان وابستگی بین کلاس ها را از بین ببریم. این کار فرایند گسترش و تغییر در پیاده سازی را آسان می کند

 

:Controller

. (mvc) استفاده از کلاس هایی که وظیفه مدیریت و برقراری ارتباط بین بقیه کلاس ها را دارند. مثل

 

:Cohesion

(!کلاس های مختلف باید منسجم باشند و با هم یک واحد را تشکیل دهند. ( انسجام در کلاس ها

 

:Polymorphism

!استفاده از چندریختی

 

:Indirection

.بین کلاس ها نیاز به کلاس ها واسطه ای خواهیم داشت که ارتباط این دو کلاس را تامین کنند coupling برای کاهش وابستگی یا

 

:Pure Fabrication

.ها می شوند principle ارائه می دهند یا باعث برقراری بعضی از service را در طراحی ما تعریف نمی کنند، اما در طراحی ما یک سری entity استفاده از کلاس هایی که به طور مشخص و فیزیکی یک

.(‌ controllerمثلا کلاس های )

 

:Protected Variation

.را بشناسند API ثابتی همواره برقرار باشد و مخاطب های یک کلاس صرفا این API ارتباط بین کلاس ها باید با یک

.های سیستم نشود entity و داخل یک کلاس باعث تغییر در بقیه کلاس ها و logic این کار باعث می شود که تغییر در

 

:منابع

  • https://medium.com/@mari_azevedo/s-o-l-i-d-principles-what-are-they-and-why-projects-should-use-them-50b85e4aa8b6
  • https://dzone.com/articles/solid-grasp-and-other-basic-principles-of-object-o
  • Persian

About Nilva

No. 5
Orang Dead End
Abbas Sharghi Alley
Akbari Blv
Tehran, IRAN

T: +98 (0)915 077 3830
E: admin@nilva.ir