Patterns of Enterprise Application Architecture
Martin Fowler
Refactoring: Improving the Design of Existing Code