Pattern oriented software architecture a system of patterns (Wiley, 1996)