March 10, 2023

Миграция кода или Приключение на 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. Проверяются привнесенные изменения или пропущенные старые конструкции.

🙈 Мы не сразу пришли к такому процессу, поэтому старожилы могут в комментариях вспомнить “былые времена”)

Данные процесс мы планируем сделать публичным. И вместе со скриптами миграции будут выпускаться и автотесты наших проверок.


🤜🤛 Будем и дальше держать вас в курсе возможностей Платформы.

А впереди самый горячий пост про существующую и разрабатываемую валидацию схем. 👨‍🚒

Расскажем как мы помогаем аналитика писать чистый и корректный код.