Лучшие практики Ziva
Собрали рекомендации, которые помогают командам внедрять Ziva в продакшн-проекты: от структуры кода до отладки на встроенных устройствах.Архитектура и организация кода
- Выносите создание задач в фабрики или методы слоёв, чтобы очереди оставались читаемыми.
- Группируйте задачи по этапам и используйте отдельные очереди для каждого этапа (сбор данных → проверка → применение). Это упрощает тестирование и повторное использование.
- Сохраняйте ссылки на задачи, чьи значения понадобятся позже. После
queue.Run()они продолжают хранить состояние. - Вызывайте
ziva.AutoConfigure()и настройку языка (SetDefaultLanguage,SetLanguage) вmain(), прежде чем создавать очереди.
Работа с очередями
- Используйте
WithTasksNumbered(true, "[%02d]")для длинных сценариев — пользователи быстрее ориентируются в списке. - Отключайте итоговую сводку (
WithOutSummary()), если протокол ведётся в отдельном лог-файле, и наоборот добавляйтеWithSummaryFunction, когда нужно показать ключевые результаты. - Не забывайте про
WithTimeout*()в headless-средах (CI, SSH). Указывайте значение по умолчанию, безопасное для сценария. - Для динамических сценариев создавайте отдельный
Queue, формируйте список задач и запускайте его после основной очереди.
Валидация и ввод
- Описывайте требования через
Description()— Ziva показывает подсказку под полем. - Комбинируйте встроенные валидаторы фабрики
DefaultValidatorsс собственными типами. Для сложных правил создавайте композиции и покрывайте их тестами. - Если поле может быть пустым, используйте
WithAllowEmpty(true)и валидатор, корректно обрабатывающий пустую строку (например,OptionalEmail). - Для сетевых проверок (дубликаты в CRM, доступность сервиса) добавляйте
FuncTaskсразу после ввода и отображайте краткий итог.
Стили и локализация
- Настраивайте цвета ошибок через
ziva.SetErrorColor, если бренд требует собственную палитру. После экспериментов вызывайтеResetErrorColors(). - На ограниченных терминалах объединяйте
EnableEmbeddedMode()иEnableASCIIMode()— это гарантирует читаемый вывод.
Производительность и встроенные устройства
- Ограничивайте историю завершённых задач переменной окружения
ZIVA_MAX_COMPLETED_TASKS. - Следите за памятью через
ZIVA_MEMORY_PRESSURE_THRESHOLDи периодически очищайте кэш строкziva.ClearInternCache()в долго живущих CLI. - Для больших списков используйте
WithViewport(...)— так интерфейс не «прыгает» и остаётся отзывчивым. - Разделяйте операции на небольшие
FuncTask, чтобы прогресс отображался чаще и пользователь понимал, что происходит.
Тестирование и отладка
- Покрывайте фабрики задач unit-тестами: создавайте задачу, эмулируйте сообщения (
Update) и проверяйте финальный результат. - Поднимайте демонстрационные очереди в
examples/и запускайте их вручную — скриншоты и GIF можно получать черезziva.WithClearScreen(false). - Логируйте ошибки вне Ziva (через
log/zap), особенно когда очередь останавливается из-заWithStopOnError(true). Это ускоряет диагностику.
Контрольный список перед релизом
- Проверены все таймауты и значения по умолчанию.
- Задачи сгруппированы по этапам, вывод адаптирован под ширину терминала.
- Валидация покрывает негативные сценарии, сложные правила протестированы.
- Цвета и локализация соответствуют требованиям бренда/рынка.
- Встроенные устройства протестированы с
AutoConfigure()и embedded-режимом.