Practical Object-Oriented Design in Ruby - Sandi Metz