One of my favorite Robert Martin's books, Agile Software Development Priciples, Patterns and Practices. I like especially the Priciples part of the book:

- Single-Responsibility
- Open-Closed Principle
- The Liskov Substitution Principle
- Dependency-inversion Principle
- Interface-Segregation Principle

A good review of the book by David Hayden:
http://codebetter.com/blogs/david.hayden/archive/2005/06/17/64766.aspx