Software architecture and Design Patterns