The SOLID Principles of programming are a good set of rules to follow when you are designing and developing an object oriented application.
Single Responsiblity Principle – A class should do one thing and do it well. If you can think of more than one reason to change a class, then it has more than one responsibility.
Open / Closed Principle – A class should be open for extension but closed for modification. Classes should be designed so they can be inherited from without having to modify them.
Liskov Substitution Principle – Derived classes must be substitutable for their base class. When a class method accepts an object, the method should be able to accept children of that object without knowing anything about the children.
Interface Segregation Principle – Interfaces should be fine grained and only provide for your needs. When building your interfaces, you should not add more functionality than what you need at the time.
Dependency Inversion Principle – High level modules should not depend on low level modules, but instead both should depend on abstractions. Interfaces should be used as placeholders and factory classes should be used to instantiate objects. This causes loose coupling between classes.