Ответ
В современной разработке, особенно в вебе, используется несколько ключевых архитектурных паттернов, каждый из которых решает определённый круг задач.
-
MVC (Model-View-Controller)
- Назначение: Разделение бизнес-логики (Model), пользовательского интерфейса (View) и логики управления (Controller). Это классический паттерн, который помогает структурировать монолитные приложения.
- Примеры: Django, Ruby on Rails.
-
Микросервисная архитектура (Microservices)
- Назначение: Декомпозиция большого приложения на набор небольших, независимо развертываемых сервисов. Каждый сервис отвечает за свою бизнес-функцию и общается с другими по сети (через REST API, gRPC или брокеры сообщений).
- Преимущества: Масштабируемость, технологическая гибкость, отказоустойчивость.
-
Событийно-ориентированная архитектура (Event-Driven)
- Назначение: Компоненты системы общаются асинхронно через события. Один сервис (producer) генерирует событие, а другие (consumers) на него подписываются и реагируют. Часто используется вместе с микросервисами.
- Инструменты: RabbitMQ, Apache Kafka.
-
Многоуровневая архитектура (Layered Architecture)
- Назначение: Разделение приложения на горизонтальные слои по технической ответственности. Классические слои: Presentation (UI), Business Logic (Services), Data Access (Repositories).
Пример реализации MVC в Flask
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/<int:user_id>')
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:
# <h1>{{ user.name }}</h1>
# <p>Email: {{ user.email }}</p>