Christian does a great job of focusing on patterns from a .NET perspective. He explores some very practical patterns and provides .NET specific guidance and code for implementations.
I particularly liked the bubble-up pattern for exception handling as I am a firm believer in top-level exception management. He looks at a broad set of patterns from the presentation tier to the data tier, and does a great job of focusing on XML and XML Web services throughout.
The best part of the book is the fact that Christian's insights come from a real-world experience with patterns and .NET. That's readily apparent by the way he brings it all together in the section on applying patterns to commercial products. He offers something to everyone:
The Software Patterns Series
Series Editor: John M. Vlissides
The Software Patterns Series (SPS) comprises pattern literature of lasting significance to software developers. Software patterns document general solutions to recurring problems in all software-related spheres, from the technology itself, to the organizations that develop and distribute it, to the people who use it. Books in the series distill experience from one or more of these areas into a form that software professionals can apply immediately.
Relevance and impact are the tenets of the SPS. Relevance means each book presents patterns that solve real problems. Patterns worthy of the name are intrinsically relevant; they are borne of practitioners' experiences, not theory or speculation. Patterns have impact when they change how people work for the better. A book becomes a part of the series not just because it embraces these tenets, but because it has demonstrated it fulfills them for its audience.
Titles in the series:
Data Access Patterns: Database Interactions in Object-Oriented Applications , Clifton Nock
Design Patterns Explained: A New Perspective on Object-Oriented Design , Alan Shalloway/James R. Trott
Design Patterns Java Workbook , Steven John Metsker
The Design Patterns Smalltalk Companion , Sherman Alpert/Kyle Brown/Bobby Woolf
The Joy of Patterns: Using Patterns for Enterprise Development , Brandon Goldfedder
The Manager Pool: Patterns for Radical Leadership , Don Olson/Carol Stimmel
.NET Patterns: Architecture, Design, and Process , Christian Thilmany
Pattern Hatching: Design Patterns Applied , John Vlissides
Pattern Languages of Program Design , edited by James O. Coplien/Douglas C. Schmidt
Pattern Languages of Program Design 2 , edited by John M. Vlissides/James O. Coplien/Norman L. Kerth
Pattern Languages of Program Design 3 , edited by Robert Martin/Dirk Riehle/Frank Buschmann
Small Memory Software , James Noble/Charles Weir
Software Configuration Management Patterns , Stephen P. Berczuk/Brad Appleton
For more information, check out the series web site at www.awprofessional.com/series/swpatterns
Forewords
Pattern recognition just might be the fundamental operation of human intelligence. Once Christopher Alexander recognized that patterns exist in good buildings, it wasn't long before software developers began talking explicitly about the patterns that exist in good code. What took us so long? Reusing not just code, but also the way we create that code, makes good sense.
One of the most important bodies of reusable code today is the class library that's part of the .NET Framework. This very large set of software provides standard ways to manipulate XML documents, create GUIs, communicate with other systems, and much more. Learning to use at least some parts of this library is a fundamental task for any Windows software developer.
Yet learning this technology alone isn't enough. Understanding how a particular .NET namespace works doesn't automatically give you the intellectual tools necessary to apply this understanding effectively. Figuring out which patterns work best in a given .NET context is a critical part of creating a good solution.
That's where .NET Patterns: Architecture, Design, and Process comes in. In this book, Christian Thilmany combines the abstractions of the design patterns world with the concrete development approach embodied in .NET. The result is a collection of ideasguiding practices as well as more formal patternsthat will be useful for a large set of .NET developers. Some of them are generic enough to be used by anybody working in any software environment. Others depend specifically on some aspect of .NET, which is exactly what you'd expect from a book with this focus. In either case, software professionals working in the .NET world can gain from the experience of those who've gone before.
The design patterns movement has long been a fixture of the Java community. I'm happy to see that with the arrival of .NET, the Microsoft world is also explicitly embracing these ideas. This book is a valuable step down that road.
David Chappell
San Francisco, CA
Preface
The Road to .NET and this Book
Until now, we have been inundated with a melee of material in the areas of software architecture, design, and professional principles. The need for design material seems to be always at its peak when either a new language or technology appears in the market. When Java first entered the market, you could hear the squalls of developers as they flooded into the local bookstores to pick up the latest copy of Learn Java in 10 Minutes . Not only was Java a new language but it was also a new platform, and it was the language for developing rich Internet applications. Not only were developers challenged with a new syntax but they also had to learn the new semantics of this new development medium. For those new to object-oriented technologies, it meant an even greater learning curve. Everything in Java is an object, and it takes another level of discipline to design robust and reusable applications even after mastering the syntax and its base libraries. Having been programming in Java since its inception, I hope I have come to appreciate the things I would like to see in any new technology material offered. This is especially true in the area of architecture and design. This book is the culmination of many of the do's and don'ts I would have liked to have had when I was not only learning .NET but trying to master it, as well.