Все кейсы

Приложение для новой отрасли собирается из настроек, а не пишется заново

Экраны, данные, права доступа и процессы описаны файлами настроек. Чтобы запустить продукт для другой отрасли, не нужно копировать и переписывать код.

Задача

На одной основе запускать приложения для разных отраслей — экспедирование грузов, автосервис — не копируя код.

Решение

Экраны, данные, права доступа и процессы описаны в файлах настроек. Из готовых блоков — таблица, форма, поле, кнопка, вкладки, меню — собирается интерфейс; там же описаны маршруты, сущности, кто что видит, запросы к данным и переводы.

Простые выражения подставляют данные, приводят типы, форматируют и проверяют условия. Настройки проверяются по схеме и собственным валидатором, поэтому ошибка находится до запуска, а не у пользователя.

Результат

157 модулей в основе, 60 модулей и 218 процессов в отраслевом приложении, ещё одно приложение на 14 модулей. Новая отрасль подключается настройками.

Второе применение того же подхода

Принцип тот же, что в системе учёта перевозок, задача другая: там настройками описаны процессы, здесь — экраны, данные и права.

Как устроено

Приложения для разных отраслей собираются из файлов настроек на одном ядре платформыЭкспедирование грузов60 модулей · 218 процессовАвтосервис14 модулейНовая отрасльтолько файлы настроек, без кодаФайлы настроекэкраны · данные · права · процессы · переводы · маршрутыСхема и валидаторошибка находится до запускаЯдро платформы: 157 модулейблоки: таблица, форма, поле, кнопка, вкладки, меню · выражения · права доступаДанныеGraphQL-запросы и мутацииПриложения для разных отраслей собираются из файлов настроек на одном ядре платформыЭкспедирование грузов60 модулей · 218 процессовАвтосервис14 модулейНовая отрасльтолько файлы настроек, без кодаФайлы настроекэкраны · данные · права · процессыпереводы · маршрутыСхема и валидаторошибка находится до запускаЯдро платформы: 157 модулейблоки: таблица, форма, поле, кнопка,вкладки, менювыражения · права доступаДанныеGraphQL-запросы и мутации

Почему так, а не иначе — где подход упирается в предел

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

Первая — соблазн дописать язык. Как только в настройках появляются условия, потом циклы, потом функции, обнаруживаешь, что написал плохой язык программирования без отладчика и подсветки. Поэтому выражения намеренно ограничены подстановкой, приведением типов, форматированием и простыми условиями. Всё, что сложнее, уходит в код.

Вторая — ошибки находятся при работе, а не при сборке. Опечатку в настройках не поймает компилятор. Отсюда схема на все типы блоков, действий и колонок плюс собственный валидатор: так ошибка находится до запуска, а не у пользователя.

Третья — читаемость. Файл настроек на несколько сотен строк перестаёт быть проще кода, и его начинают копировать вместо того, чтобы переиспользовать.

Вывод, который я забираю в любой проект: настройками стоит описывать то, что правда меняется часто и людьми без разработчика. Всё остальное дешевле оставить кодом.

Другие кейсы

Кейсы и личные проекты