Что такое CQRS

«Что такое CQRS» — вопрос из категории Архитектура, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

CQRS (Command Query Responsibility Segregation) — это архитектурный паттерн, разделяющий операции чтения (Query) и записи (Command) в разные модели.

Основные идеи:

  • Команды (Commands) изменяют состояние (например, CreateUser, UpdateOrder). Они не возвращают данные, только подтверждение или ошибку.
  • Запросы (Queries) только читают данные (например, GetUserByID). Они не изменяют состояние.

Преимущества:

  • Масштабируемость (разные БД для чтения/записи).
  • Гибкость (оптимизация моделей под конкретные задачи).

Пример на Go:

// Command (запись)
type CreateUserCommand struct {
    Name  string
    Email string
}

func (c *CreateUserCommand) Handle() error {
    // Логика сохранения пользователя
    return nil
}

// Query (чтение)
type GetUserQuery struct {
    ID int
}

func (q *GetUserQuery) Handle() (*User, error) {
    // Логика получения пользователя
    return &User{}, nil
}

Минусы: Усложнение архитектуры, eventual consistency.