“Each pattern then depends both on the smaller patterns it contains, and on the larger patterns within which it is contained.” — Christopher Alexander in The Timeless Way of Building
An innovation in one area of technology often fuels a breakthrough in another area. Radar technology turned into a cooking device: the microwave oven. The Internet itself was originally designed as a military communications network with resilience against single points of attack and has since turned into the world’s largest repository of knowledge. Similarly, patterns, originally applied to building and town architecture, were quickly embraced by the software development community as a means to describe complex software systems.
Today there are dozens of patterns related to software with more emerging daily. This abundance of patterns creates a new set of challenges. How can a developer identify those patterns that are most relevant to the task at hand? Is the collection of patterns sufficient to describe complete solutions?
This chapter answers some of these questions by demonstrating how to:
Identify relationships between patterns.
Group patterns into clusters.
Identify patterns at various levels of abstraction.
Apply patterns to multiple aspects of a solution.
Organize patterns into a frame.
Use patterns to describe solutions concisely.