Фильтрация результатов

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

Результат выполнения проверки в Vest формируется как иерархическая структура:

  • набор полей (fields)
  • внутри каждого поля — список тестов (tests)
  • внутри тестов — состояние выполнения (pass/fail/skip)
  • дополнительные метаданные: сообщения, теги, группы

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

Базовые принципы фильтрации

Фильтрация результатов валидации опирается на три фундаментальных подхода:

1. Фильтрация по пути (path-based filtering) Позволяет извлекать результаты конкретного поля или вложенного узла структуры.

2. Фильтрация по статусу (state-based filtering) Используется для выделения только неуспешных, успешных или пропущенных тестов.

3. Фильтрация по метаданным (meta-based filtering) Позволяет работать с тегами, группами и пользовательскими атрибутами тестов.

Эти подходы комбинируются, формируя выразительный механизм выборки данных.

Фильтрация по полям

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

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

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

Фильтрация по полям часто используется для:

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

Фильтрация по статусу выполнения

Каждый тест в Vest имеет итоговое состояние, определяемое результатом проверки:

  • успешное выполнение
  • ошибка
  • пропуск

Фильтрация по статусу позволяет извлекать подмножества тестов:

Выборка ошибок Используется для отображения сообщений пользователю и блокировки отправки формы.

Выборка успешных тестов Применяется для аналитики и подтверждения валидного состояния полей.

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

Состояние тестов становится основой для построения агрегированных представлений, таких как “валидность поля” или “валидность всей формы”.

Фильтрация по группам

Группы в Vest позволяют объединять тесты в логические блоки. Это используется для:

  • пошаговых форм
  • секционированной валидации
  • условных сценариев проверки

Фильтрация по группам дает возможность:

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

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

Комбинированная фильтрация

Реальные сценарии редко ограничиваются одним типом фильтра. Чаще используется композиция:

  • поле + статус
  • группа + поле
  • статус + мета-теги
  • поле + группа + статус

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

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

  • извлечь только ошибки
  • ограничить их конкретной группой
  • дополнительно отфильтровать по набору полей

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

Фильтрация через метаданные

Тесты в Vest могут содержать метаданные, такие как:

  • пользовательские теги
  • категории проверок
  • приоритеты ошибок
  • контекст выполнения

Фильтрация по метаданным позволяет строить высокоуровневые системы анализа:

  • выделение критических ошибок
  • группировка предупреждений
  • формирование отчетов по типам проверок

Метаданные превращают результаты валидации в расширяемую систему, где логика анализа отделена от структуры данных.

Ленивые выборки и производительность

При работе с большими формами фильтрация результатов может становиться дорогостоящей операцией. Поэтому применяется ленивый подход:

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

Внутри системы Vest это позволяет минимизировать перерасчет результатов при изменении одного поля, сохраняя высокую производительность.

Инкрементальная фильтрация

Одним из важных аспектов является возможность повторного использования ранее отфильтрованных данных. При изменении состояния формы:

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

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

Селективное извлечение ошибок

Частый сценарий — извлечение только ошибок для отображения в интерфейсе. В этом случае фильтрация строится как цепочка:

  • выборка всех полей
  • переход к тестам
  • отбор неуспешных состояний
  • извлечение сообщений

Полученная структура обычно приводится к плоскому списку для упрощения отображения.

Фильтрация для условной логики интерфейса

Результаты валидации часто используются не только для отображения ошибок, но и для управления интерфейсом:

  • блокировка кнопок
  • изменение доступности шагов
  • скрытие или отображение блоков формы

Фильтрация позволяет извлекать минимально необходимое состояние, достаточное для принятия решений на уровне UI.

Агрегация после фильтрации

После применения фильтров часто выполняется агрегация:

  • подсчет количества ошибок
  • определение валидности секции
  • вычисление общего состояния формы

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

Композиция фильтров в архитектуре

В сложных приложениях фильтрация результатов становится частью архитектурного слоя:

  • отдельные функции фильтрации
  • переиспользуемые селекторы
  • изолированные правила извлечения состояния

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