Architectural Patterns and Software Architectures: Client-Server, Multi-Tier, MVC, MVP, MVVM, IoC, DI, SOA, Cloud Computing