Какие основные архитектурные паттерны применяются в современной веб-разработке?

«Какие основные архитектурные паттерны применяются в современной веб-разработке?» — вопрос из категории Архитектура, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В современной разработке, особенно в вебе, используется несколько ключевых архитектурных паттернов, каждый из которых решает определённый круг задач. 1. **MVC (Model-View-Controller)** * **Назначение**: Разделение бизнес-логики (Model), пользовательского интерфейса (View) и логики управления (Controller). Это классический паттерн, который помогает структурировать монолитные приложения. * **Примеры**: Django, Ruby on Rails. 2. **Микросервисная архитектура (Microservices)** * **Назначение**: Декомпозиция большого приложения на набор небольших, независимо развертываемых сервисов. Каждый сервис отвечает за свою бизнес-функцию и общается с другими по сети (через REST API, gRPC или брокеры сообщений). * **Преимущества**: Масштабируемость, технологическая гибкость, отказоустойчивость. 3. **Событийно-ориентированная архитектура (Event-Driven)** * **Назначение**: Компоненты системы общаются асинхронно через события. Один сервис (producer) генерирует событие, а другие (consumers) на него подписываются и реагируют. Часто используется вместе с микросервисами. * **Инструменты**: RabbitMQ, Apache Kafka. 4. **Многоуровневая архитектура (Layered Architecture)** * **Назначение**: Разделение приложения на горизонтальные слои по технической ответственности. Классические слои: Presentation (UI), Business Logic (Services), Data Access (Repositories). **Пример реализации MVC в Flask** ```python from flask import Flask, render_template app = Flask(__name__) # --- Model --- # Обычно это класс, работающий с БД, например, через SQLAlchemy. # Для простоты здесь используется словарь. users_db = { 1: {"name": "Alice", "email": "alice@example.com"}, 2: {"name": "Bob", "email": "bob@example.com"} } class User: @staticmethod def get(user_id): return users_db.get(user_id) # --- Controller --- # Обрабатывает запрос, получает данные от модели и передает их в представление. @app.route('/user/') def user_profile(user_id): user_data = User.get(user_id) if not user_data: return "User not found", 404 # --- View --- # В качестве View выступает HTML-шаблон, который рендерится с данными. return render_template('user_profile.html', user=user_data) # В шаблоне user_profile.html: #

{{ user.name }}

#

Email: {{ user.email }}

```