10 Common Software Architectural Patterns