Solid Design Principles With Examples