Миграция кода или Приключение на 20 минут
В прошлых постах мы начали рассказывать про типовые проблемы, с которыми может столкнуться пользователь low-code Платформы:
- ошибки кода json-схем
- устаревший код используемых функций 👈
не верное использование виджетов/хэлперов👍 [ссылка]ошибка самой Платформы👍 [ссылка]
Сегодня расскажем про код, который устарел или используется не оптимально.
Благодаря low-code аналитики (конфигураторы) не задумываются о специфике языка или структуре функций.
Используя готовые "кубики Lego" можно собрать требуемую бизнес логику.
Проверкой занимаются внутренние "фиксики"👨🔧 платформы, которые обеспечивают актуальность используемых конструкций и валидность кода.
При этом конструкции со временем обрастают новыми параметрами, обязательными к заполнению полями или другим "мясцом".
Когда дело касается отказа от устаревших блоков кода или изменения структуры - для живого проекта это боль.
Боль в виде переписывания существующих схем, рисков и ретеста функциональности.
В каждом новом релизе мы оптимизируем работу наших сервисов, что может повлечь за собой потребность в изменении кода бизнес-приложений (схем ресурсов).
Для удобства пользователей (аналитиков, которые разрабатывают и поддерживают схемы), в составе релиза также выпускаются скрипты миграции.
Платформа поддерживает и развивает несколько направлений миграции:
Миграция данных (Migrate service)
Возможность загрузить подготовленные данные для старта или актуализации бизнес-приложения (БП).
В репозиторий resources в папке migrations подготавливаются файлы с данными, которые будут установлены/обновлены на контуре при следующей установке.
Это может быть конфигурация бизнес-логики (ограничение объема процедур или организаций-заказчиков ), загрузка файлов (логотип, шаблоны отчетов) или наполнение базы данных (например, данные справочников, шаблоны рассылок)
Данный вид миграции запускается единожды при создании контура и далее точечно устанавливаются обновляемые изменения.
Миграция кода (Migration-CLI)
Скрипты с правилами изменения кода в схемах ресурсов.
Миграция запускается единожды при внедрении нового релиза (в составе которого миграция разработана).
В выпущенных релизах factory 12.11.х и готовящемся factory 12.12 у нас скопилось несколько миграций кода, которые готовы актуализировать ваш уже готовый код.
О них и будет сегодняшний пост.
Почему появилась потребность в миграциях?
Не новость, что кроме low-code Платформы ( factory ) мы готовим к выпуску новое решение - Визуальный конфигуратор ( studio ) 😍.
В первых версиях factory у аналитиков была единственная возможность работать с кодом - напрямую в IDE. О возможностях платформы и конструкциях кода можно было узнать из документации.
Визуальный конфигуратор позволит как в интернет-магазине накликать условия выполнения цепочки бизнес-логики и визуализировать будущие формы, еще до их отправки в БП. При желании можно будет продолжить работать с кодом во встроенном редакторе кода, но также пользоваться всеми фишками нового продукта.
Подробнее о studio мы расскажем в следующих постах.
Тестируя удобство работы с Визуальным конфигуратором мы заметили нехватку информации в существующих конструкциях.
Так появилась миграция ReplaceIfHelperParamsToObjectProperties, изменение структуры функции $if.
📌 Функции (рабочее название - helper) - готовая конструкция ("черный ящик") с входными аргументами, которая реализует логику обработки данных. Функции обозначаются знаком "quot; перед названием.
Мы расширили валидацию, добавили пояснение к аргументам. Но также заменили конструкцию функции: раньше это был тип Array, теперь Object.
Запуск миграции позволит за считанные секунды актуализировать код и безопасно произвести замены.
В чем-то мы сознательно пошли на усложнение в угоду удобства будущей визуализации.
Например, миграция SimplifiedNotationToWithArguments - расширяет конструкцию “функция - входное значение” до “функция - аргумент - входное значение”.
✅ Хорошая новость в том, что мы готовим помощника, который будет подсказывать названия аргументов и общую конструкцию функции при работе напрямую с кодом.
Далее мы заглянули в код одного из проектов, реализованных на Платформе, и заметили не оптимальное использование конструкций. Код можно было сделать более простым и “читабельным”.
Мы реализовали миграцию AssignObjectTransform, которая заменяет сложную конструкцию на упрощенную, там где это возможно и необходимо.
А миграция ChangeSubsToVarEventClick заменяет использование $subs на $var в widget.events для события click.
🧐 А все потому что при использовании subs внутри секции events происходит зацикливание подписок.
О таком правиле будет напоминать workspace🤖, о котором мы рассказывали ранее, а быстро исправить код прямо сейчас поможет миграция.
❣️Все эти примеры о том что кроме реактивного развития продукта, мы думаем о наших пользователях и их удобстве работы, о качестве кода, который пишется на low-code.
❓А можно не запускать миграцию, а только новые фичи релиза взять?
К сожалению, нет. Код платформы переписывается под новые конструкции, мы создаем валидаторы, которые будут подсказывать пользователям как корректно писать код, актуализируется документация согласно изменениям.
Поэтому миграция обязательный шаг при переходе на новый релиз.
А как тестируются такие миграции? 😈
Для миграции пишется “исходная” схема. Мы записываем все возможные и невозможные случаи использования мигрируемой конструкции.
Готовится схема “ожидаемый результат”.
Далее запускается миграция на “исходной” схеме и сверяется результат.
🔎 Мы проверяем что там где ожидалось конструкция корректно преобразилась, не привнесено новых изменений и код по-прежнему валидный.
Следующий этап это запуск миграции на последнем релизе нашего соседа - продукта ProQ. Проверяются привнесенные изменения или пропущенные старые конструкции.
🙈 Мы не сразу пришли к такому процессу, поэтому старожилы могут в комментариях вспомнить “былые времена”)
Данные процесс мы планируем сделать публичным. И вместе со скриптами миграции будут выпускаться и автотесты наших проверок.
🤜🤛 Будем и дальше держать вас в курсе возможностей Платформы.
А впереди самый горячий пост про существующую и разрабатываемую валидацию схем. 👨🚒
Расскажем как мы помогаем аналитика писать чистый и корректный код.