Solid Principles of Object Oriented Programming to make software designs more understandable, flexible and maintenable
Single Responsibility Principle
A class should've a single responsibility
Open Closed Principle
Types should be open for extension, but closed for modification
Liskov Subsitution Principle
Objects in a program should be replaceable with instances of their sub-type without altering correctness of that program
Interface Segregation Principle
Many client-specific interfaces are better than one general-purpose interface
Dependency Inversion Principle
Depend on abstractions not on concrete types