Pattern-oriented software architecture (Wiley, 2007)