A Taxonomy of Architectural Patterns for Self-Adaptive Systems