A class should have only a single responsibility.
A class should be open for extension but closed for modification.
A type must be substitutable by its subtypes without altering the correctness of the application.
Clients of a class should not be forced to depend on those of its methods that they don’t use.
High-level classes should not dependent on low-level classes. Both of them should depend on abstractions.
Abstractions should not depend upon details. Details should depend upon
abstractions.
- Do methods in the class have similar responsibilities? (SRP)
- Are there any method in the class that functions different based on different variables? (OCP)
- Are there any functionless methods/properties which comes from base class/interface in your derived classes? (LSP & ISP)
- Are there initiations of non-abstract objects in a high-level class? (DIP)
Beginning SOLID Principles and Design Patterns for ASP.NET Developers - Bipin Joshi
By @BilgesPage