Pattern-Oriented Software Architecture Volume 1: A System of Patterns