В системе валидации Vest результаты проверки представляют собой структурированное дерево, отражающее состояние каждого правила, группы правил и отдельных полей. Фильтрация этих результатов является ключевым механизмом построения адаптивной логики интерфейса, условного отображения ошибок и оптимизации обработки состояния формы.
Результат выполнения проверки в Vest формируется как иерархическая структура:
Каждый уровень структуры может быть использован как точка фильтрации, что позволяет извлекать только необходимую часть информации без обхода всего дерева вручную.
Фильтрация результатов валидации опирается на три фундаментальных подхода:
1. Фильтрация по пути (path-based filtering) Позволяет извлекать результаты конкретного поля или вложенного узла структуры.
2. Фильтрация по статусу (state-based filtering) Используется для выделения только неуспешных, успешных или пропущенных тестов.
3. Фильтрация по метаданным (meta-based filtering) Позволяет работать с тегами, группами и пользовательскими атрибутами тестов.
Эти подходы комбинируются, формируя выразительный механизм выборки данных.
На уровне полей структура результатов обычно представляет словарь, где ключом выступает имя поля формы. Фильтрация по полям позволяет ограничить выборку конкретными сущностями:
Внутренне это сводится к работе с ключами результирующего объекта, где каждое поле содержит собственное поддерево тестов. Такой подход особенно эффективен при работе с большими формами, где количество полей превышает десятки или сотни.
Фильтрация по полям часто используется для:
Каждый тест в Vest имеет итоговое состояние, определяемое результатом проверки:
Фильтрация по статусу позволяет извлекать подмножества тестов:
Выборка ошибок Используется для отображения сообщений пользователю и блокировки отправки формы.
Выборка успешных тестов Применяется для аналитики и подтверждения валидного состояния полей.
Выборка пропущенных тестов Имеет значение в сценариях условной валидации, где часть логики может быть временно отключена.
Состояние тестов становится основой для построения агрегированных представлений, таких как “валидность поля” или “валидность всей формы”.
Группы в Vest позволяют объединять тесты в логические блоки. Это используется для:
Фильтрация по группам дает возможность:
Групповая структура особенно важна при сложной бизнес-логике, где валидация зависит не только от значений полей, но и от контекста текущего шага или режима работы.
Реальные сценарии редко ограничиваются одним типом фильтра. Чаще используется композиция:
Комбинированная фильтрация позволяет строить точные запросы к результату валидации без необходимости обхода всей структуры вручную.
Пример логики:
Такой подход снижает сложность обработки состояния и уменьшает количество вычислений в пользовательском интерфейсе.
Тесты в Vest могут содержать метаданные, такие как:
Фильтрация по метаданным позволяет строить высокоуровневые системы анализа:
Метаданные превращают результаты валидации в расширяемую систему, где логика анализа отделена от структуры данных.
При работе с большими формами фильтрация результатов может становиться дорогостоящей операцией. Поэтому применяется ленивый подход:
Внутри системы Vest это позволяет минимизировать перерасчет результатов при изменении одного поля, сохраняя высокую производительность.
Одним из важных аспектов является возможность повторного использования ранее отфильтрованных данных. При изменении состояния формы:
Такой механизм снижает нагрузку при частых изменениях пользовательского ввода.
Частый сценарий — извлечение только ошибок для отображения в интерфейсе. В этом случае фильтрация строится как цепочка:
Полученная структура обычно приводится к плоскому списку для упрощения отображения.
Результаты валидации часто используются не только для отображения ошибок, но и для управления интерфейсом:
Фильтрация позволяет извлекать минимально необходимое состояние, достаточное для принятия решений на уровне UI.
После применения фильтров часто выполняется агрегация:
Агрегация работает поверх уже отфильтрованных данных, что уменьшает объем вычислений и повышает предсказуемость поведения системы.
В сложных приложениях фильтрация результатов становится частью архитектурного слоя:
В Vest это позволяет строить масштабируемые системы валидации, где логика анализа результатов отделена от логики их получения и выполнения тестов.