Avoid Complexity
lPrefer classes to interfaces
lPrefer constructors to factory methods
lAvoid excessive abstraction