Write code to respond to external events, such as from an existing framework
high level modules should not depend on low level modules; both should depend on abstractions.
Methods and classes should explicitly require any collaborating objects they need in order to function correctly
Every module, class or function in a computer program should have responsibility over a single part of that program's functionality, and it should encapsulate that part
A simple solution is better than a complex one.
Don't add the class/object names to properties