TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • flag Russian
    Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
PHP | Вопросы собесов

13 Aug, 12:05

Открыть в Telegram Поделиться Пожаловаться

🤔 Что такое CQRS?

CQRS (Command Query Responsibility Segregation) – это архитектурный паттерн, который разделяет операции чтения (Query) и записи (Command) в приложении. Вместо одной модели данных используется две:
Модель для чтения – оптимизирована для запросов.
Модель для записи – отвечает за изменение данных.

🚩Зачем нужен CQRS?

🟠Производительность
запросы можно кэшировать, а запись может происходить в другой базе.
🟠Гибкость
можно использовать разные структуры данных для чтения и записи.
🟠Масштабируемость
можно масштабировать чтение и запись отдельно.
🟠Безопасность
можно ограничить доступ к записи.

🚩Как это работает?

В классическом приложении чтение и запись используют одну модель данных
class User {
public $id;
public $name;
public $email;

public function updateEmail($newEmail) {
$this->email = $newEmail;
}
}

Команда (Command) – запись
class UpdateUserEmailCommand {
public int $userId;
public string $newEmail;

public function __construct($userId, $newEmail) {
$this->userId = $userId;
$this->newEmail = $newEmail;
}
}

class UserCommandHandler {
public function handle(UpdateUserEmailCommand $command) {
// Логика обновления в БД
$db = new PDO("mysql:host=localhost;dbname=test", "root", "password");
$stmt = $db->prepare("UPDATE users SET email = :email WHERE id = :id");
$stmt->execute([
':email' => $command->newEmail,
':id' => $command->userId
]);
}
}

Запрос (Query) – чтение
class UserQueryHandler {
public function getUserById($userId) {
$db = new PDO("mysql:host=localhost;dbname=test", "root", "password");
$stmt = $db->prepare("SELECT id, name, email FROM users WHERE id = :id");
$stmt->execute([':id' => $userId]);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
}

🚩CQRS + Event Sourcing

Часто CQRS используется вместе с Event Sourcing – вместо изменения данных мы создаем события.
class UserEmailUpdatedEvent {
public int $userId;
public string $newEmail;

public function __construct($userId, $newEmail) {
$this->userId = $userId;
$this->newEmail = $newEmail;
}
}

Ставь 👍 и забирай 📚 Базу знаний

319 0 4
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot