| This book provides an in-depth exploration of the pattern concept. Starting with a popular—yet brief and incomplete—pattern definition, we first motivate, examine, and develop the inherent properties of stand-alone patterns. A solid understanding of what a stand-alone pattern is—and what it is not—helps when applying individual patterns effectively in software development.
We next explore the space ‘between’ patterns. Patterns are fond of company and can connect to one another through a variety of relationships: they can form alternatives to one another, or natural complements, or define a specific arrangement that is applied wholesale.Patterns can also line up in specific sequences that, when applied, generate and inform the architectures of concrete software systems. Knowing about and understanding the multifaceted relationships that can exist between patterns supports the effective use of a set of patterns in software development.
Finally, we enrich the concept of stand-alone patterns with the various forms of relationships between patterns, to elaborate the notion of pattern languages. Pattern languages weave a set of patterns together to define a generative software development process for designing software for specific applications or technical domain. Pattern languages realize the vision and goal of pattern-based software development that we had in mind when we started the Pattern-Oriented Software Architecture series over ten years ago.
All the concepts we explore and develop build on one another. The various types of relationships between patterns take advantage of the properties of stand-alone patterns. Pattern languages further build on and take advantage of the relationships between patterns. Starting with an informal and intuitive characterization of what a pattern is, we progressively mine and elaborate the different properties and facets of the pattern concept, until we have developed a more complete and consistent picture of what patterns are, what they are not, how they can support you when developing software, and how they relate to other software technologies and techniques. |