Выполнение динамических скриптов
Данная статья носит ознакомительный характер.
Использование подобного подхода может серьезным образом сказаться на производительности и безопасности ваших приложений. Используйте его на свой страх и риск.
Duit реализует достаточно мощную систему управления состоянием и взаимодействия с сервером, но в некоторых случаях частое обращение к серверу может быть избыточным.
Предлагаю рассмотреть следующий случай: на форме авторизации в приложении есть поле, в которое пользователь должен ввести свой номер телефона. Далее будем называть это поле просто phone. Част ым требованием при реализации подобных виджетов является валидация входных данных при вводе. В нашем случае, нам требуется проверить, чтобы поле phone соответствовало правильному паттерну.
Как это можно реализовать средствами Duit:
- На стороне сервера связать с виджетом
TextField, который отвечает за ввод телефона, действие, которое будет отправлять текущее значение виджета на бекенд. - Валидируем полученное значение, отправляем в качестве результата валидации новое состояние виджета.
- Обновляем состояние.
При такой реализации невооруженным глазом видны серьезные проблемы, например частое обращение к серверу для валидации данных за счет вызова действия на каждый новый введенный символ. И, конечно, такое использование порождает side-effects при обновлении атрибутов и снижает производительность приложения.
Поскольку в Duit не реализована обработка вычисляемых выражений, для реализации подобной функциональности предлагается пойти другим путем - использовать стороннюю среду выполнения для интерпретирования кода, выполнения скрипта и возврата результата выполнения на сторону Dart.
Пример с полноценной реализацией данного подхода можно найти в репозитории duit_hetu_extension
При использовании скриптов, нам было бы необходимо связать на стороне сервера с виджетом TextField, который отвечает за ввод телефона, действие-скрипт, которое будет валидировать входные параметры и возвращать нужное состояние виджета в зависимости от результата валидации. А также реализовать необходимые для обработки скриптов абстракции на клиентской стороне.
Рассмотрим подробно все необходимые для реализации шаги.