Adaptive Code: Agile coding with design patterns and SOLID principles (2nd Edition) (Developer Best Practices)