Design Principles Single Reason Open/Close Liskov Substituion Inteface Segragation Dependency Inversion