This book is one of the more important contributions to the literature on 'patterns'
Some of you may wonder how they missed volume 1 of Pattern Oriented Software Architecture . You probably did not, but you are familiar with it under the title A System of Patterns . If you are you, will probably have high expectations of the book I am reviewing. If you then note that the authors of the first volume have been joined by Doug Schmidt your expectations should be raised further.
The subtitle of the current volume isPatterns for Concurrent and Networked Objects. That almost says it all.
I get a bit tired of authors who do not understand that patterns cannot be invented but have to be distilled from hard won experience. These authors understand that and do not waste time inventing potential patterns but look for practical examples that have stood the test of use.
The book presents four groups of patterns. It starts with fourService Access and Configuration Patterns and then proceeds with four 'Event Handling Patterns', four Synchronization Patterns and concludes with five Concurrency Patterns. As you see from the group headings, the patterns tackled in this volume are likely to have some significance to anyone writing applications for modern hardware as well as those working on distributed systems and network products.
The authors write in good quality and fluent English (yes, you will know that the authors are not native English speakers but this does not obscure their ability to communicate) which avoids the trap that many fall into, of making technical issues more difficult to understand by writing in technicallyobscure English. They follow a consistent style of presentation which helps because after reading a couple of pattern descriptions, you know what to expect and so can more quickly integrate what you read into your understanding of the subject. This is a particularly notable achievement in a book with four co-authors.
The one thing that leaves me a little uncomfortable is that most of the source code in this book is C++, but there is a scattering of Java. My concern is the close syntactic relationship between the two languages with very distinct semantics. It would be very easy for a reader who was familiar with C++ but not with Java to misunderstand the import of some examples just because the code looks familiar. I would have been happier with either a much more even balance between language usage, or the use of only one. I would prefer the former.
Following the classification used in POSA1, this book includes five Architectural Patterns, one Idiom and the rest are Design Patterns. I have always found it unfortunate that while the authors identified different levels of pattern, they have so sparsely populated the space of Idioms, the lowest level of their pattern types. I understand why, because for writers at this level of expertise most idioms are second nature, but it leaves a hole that needs filling for the benefit of the less experienced developer/software engineer.
The main material is proceeded by an introductory chapter putting it into perspective. The book concludes with two chapters. The first of these is on using patterns as a whole.
The final chapter looks at what has happened in the pattern movement since the publication of the first volume and takes a brief look ahead.
The great value of patterns is in the provision of a framework on which you can develop your designs rather than as recipes to be slavishly adhered to. If you understand this and have sufficient experience to be responsible for large-scale design then you should add this book to your library, afterhaving read it once.
This book is one of the more important contributions to the literature on 'patterns' and deserves to become a standard text on its specified area of interest.