Basic Principles

Encapsulate what varies.
Code to an interface rather than to an implementation.
Each class in your application should have only one reason to change.
Classes are about behavior and functionality.
Comments