Agile Principles, Patterns, and Practices in C#. Martin, Robert C., Prentice Hall, 2007.
One of my favorite books.
Don’t let the word “Agile” fool you (or put you off if you’re cynical or haven’t yet practiced Agile methodologies): Agile practices are mentioned, but this book is about nuts-and-bolts software design and construction. You don’t have be using an Agile process in order to learn a few things from this 700+ page tome, but it may help you appreciate the concrete design skills needed to be a good developer–agile or otherwise. The book is organized into 4 sections:
I. Development process: Planning, TDD, Refactoring
II. Design: design principles ( incl. SOLID); pragmatic guide to UML
III. Case Study: to illustrate design patterns
IV. Case Study, Packaging: design principles, more design patterns
The 4 sections are divided up into 38 easily digestable chapters. This book’s style, tone, and presentation is as entertaining as it is informative. Unlike many books that contain a large case study, the example isn’t a hulking, cumbersome thing you have invest time into sequentially.
Simple C# syntax is used throughout the examples, but it is just a means to illustrate concepts in a concrete fashion. Don’t expect to learn C# tips from this book (Generics aren’t even used). This book is just an updated C# rewrite of its 2003 predecessor, Agile Software Development: Principles, Patterns, and Practices (examples in C++/Java), which has roots going back to the 1995 book, Designing Object Oriented C++ Applications Using The Booch Method. If you have the newer C# version of this book you don’t need the other two.
Since this is a Robert C. Martin book, his classic “five principles of class design” (aka SOLID), “three principles of package cohesion,” and “three principles of package coupling” are illustrated in detail.
[Martin03]: Agile Software Development: Principles, Patterns, and Practices, Martin, Robert C., Prentice Hall, 2003.
[Martin95]: Designing Object Oriented C++ Applications Using The Booch Method, Martin, Robert C., Prentice Hall, 1995.