2. Refactoring: Improving the Design of Existing Code
3. Patterns of Enterprise Application Architecture