We’ve established that service-orientation is a design paradigm comprised of a set of design principles, each of which provides a generalized rule or guideline for realizing certain design characteristics. The paradigm itself sounds pretty complete, and it actually is. However, to successfully apply it in the real world requires more than just a theoretical understanding of its principles.
Service designers will be regularly faced with obstacles and challenges when attempting to apply a design paradigm in the real world. This is because the realization of desired design characteristics is frequently complicated by various factors, including:
- Constraints imposed by the technology being used to build and/or host the units of solution logic.
- Constraints imposed by technology or systems that reside alongside the deployed units of solution logic.
- Constraints imposed by the requirements and priorities of the project delivering the units of solution logic.
A design pattern describes a common problem and provides a corresponding solution. It essentially documents the solution in a generic template format so that it can be repeatedly applied. Knowledge of design patterns not only arms you with an understanding of the potential problems designs may be subjected to, it provides answers as to how these problems are best dealt with.
Figure 1 – Patterns provide recommended solutions for common design problems. In this simplified example, a pattern suggests we reduce external access to a database to increase application autonomy.
Design patterns are born out of experience. Pioneers in any field had to undergo cycles of trial and error and by learning from what didn’t work, approaches that finally did achieve their goals were developed. When a problem and its corresponding solution were identified as sufficiently common, the basis of a design pattern was formed. Design patterns can be further combined into compound patterns that solve larger problems and a series of patterns can form the basis of a pattern language, as explained next.