Группировка сообщений

В системе валидации на основе Vest группировка сообщений представляет собой механизм структурирования результатов проверок таким образом, чтобы ошибки и предупреждения не рассматривались как плоский список, а распределялись по контекстным областям — чаще всего по полям, шагам или логическим группам тестов. Это позволяет превращать набор независимых проверок в согласованную модель состояния формы или объекта.

Внутри Vest каждое правило валидации ассоциируется с конкретным полем или сущностью. При выполнении набора проверок формируется структура, где:

  • ключом выступает имя поля или группы;
  • значением является массив сообщений, относящихся к этому ключу.

Такой подход отличается от линейного накопления ошибок, характерного для простых валидаторов, и приближает систему к модели «словаря состояния».

Ключевое свойство: сообщения не существуют сами по себе, они всегда привязаны к контексту теста.

Контекст выполнения и группировка

Каждый вызов теста в Vest выполняется внутри контекста набора проверок. Этот контекст определяет, к какой группе будет отнесено сообщение.

Пример логики:

  • тест выполняется внутри блока проверки поля email;
  • при ошибке сообщение автоматически попадает в группу email;
  • при отсутствии ошибок группа может не содержать элементов или быть пустой.

Таким образом группировка возникает не постфактум, а во время выполнения валидации.

Группировка по полям

Наиболее распространённый вариант — группировка по именам полей.

Структурно результат выглядит следующим образом:

  • username

    • «Имя пользователя обязательно»
    • «Минимальная длина — 3 символа»
  • password

    • «Пароль слишком слабый»

Такая форма особенно полезна в формах ввода, где каждое поле имеет независимый набор ограничений.

В Vest это достигается за счёт привязки test к конкретному контексту поля.

Иерархическая группировка

Помимо плоского разделения по полям, система допускает вложенные структуры. Это важно для сложных объектов:

  • user

    • profile

      • firstName
      • lastName
    • auth

      • email
      • password

Такая модель соответствует структуре данных и позволяет точно локализовать ошибку без дополнительного анализа.

Внутренне это представляется как вложенные ключи, формируемые по пути доступа к данным.

Поведение при множественных ошибках

Один и тот же ключ может содержать несколько сообщений. Vest не ограничивает количество ошибок на поле, что важно для комплексных проверок.

Пример:

  • поле password

    • «Должен содержать заглавную букву»
    • «Должен содержать цифру»
    • «Должен быть не менее 8 символов»

Каждое правило добавляет собственное сообщение, не перезаписывая предыдущие.

Агрегация сообщений

При выполнении набора тестов система агрегирует результаты в единый объект состояния. Процесс включает:

  1. Инициализацию пустой структуры групп.
  2. Выполнение каждого теста.
  3. Добавление сообщений в соответствующую группу.
  4. Финальную нормализацию результата.

В результате получается консистентное состояние, готовое для использования в UI или бизнес-логике.

Условная группировка через контекст

В Vest группировка может зависеть от условий выполнения тестов. Если тест пропущен или не активирован, он не влияет на структуру сообщений.

Это важно для динамических форм, где часть полей появляется только при определённых условиях.

Пример логики:

  • если isCompany === true, активируется группа company;
  • если условие не выполнено, группа не создаётся вовсе;
  • сообщения не «засоряют» итоговый результат.

Повторное выполнение и пересборка групп

Каждый запуск валидации пересобирает группы заново. Это означает:

  • предыдущие сообщения не сохраняются автоматически;
  • результат всегда отражает текущее состояние данных;
  • группировка детерминирована входными значениями.

Такой подход исключает накопление устаревших ошибок.

Связь группировки и API получения результатов

Результаты группировки обычно извлекаются через методы получения состояния валидации. Структура данных уже содержит распределение по ключам, поэтому клиентский код работает не с сырым списком, а с организованной моделью.

В контексте Vest это позволяет:

  • получать ошибки по конкретному полю;
  • проверять наличие ошибок в группе;
  • агрегировать состояние всей формы.

Группировка и производительность

Группировка сообщений встроена в модель выполнения и не требует отдельного прохода по результатам. Это важно для масштабируемых форм, где количество проверок может быть значительным.

Особенности:

  • добавление в группу выполняется в момент ошибки;
  • отсутствует постобработка полного списка;
  • структура формируется инкрементально.

Консистентность структуры групп

Одним из ключевых свойств является стабильность структуры: одинаковый набор входных данных всегда приводит к одинаковой группировке.

Это позволяет:

  • кэшировать результаты;
  • сравнивать состояния валидации;
  • использовать предсказуемую модель отображения ошибок.

Практическое значение группировки

Группировка сообщений в Vest решает несколько задач одновременно:

  • связывает ошибки с конкретными частями данных;
  • упрощает отображение ошибок в интерфейсе;
  • снижает когнитивную нагрузку при анализе результатов;
  • обеспечивает масштабируемость сложных схем валидации.

Такая модель делает систему валидации не просто набором проверок, а структурированным механизмом управления состоянием данных.