Refactoring: Improving the Design of Existing Code
Martin Fowler
November 2018
Working Effectively with Legacy Code
Michael Feathers
September 2004
Design Patterns: Elements of Reusable Object-Oriented Software
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
October 1994