Software Architecture Patterns: A Complete Guide