Design Principles And Design Patterns