Refactoring by Martin Fowler, Jay Fields & Shane Harvie