Почему "лучший фреймворк для разработки бизнес приложений" ещё не "захватил мир". И что бы хотелось в 1С 9.0
Я очень люблю 1С, вероятно, потому, что я ленивый человек, и часто скорость доставки ценностей для бизнеса ставлю перед исчерпывающим идеалом во всём.
Тем не менее, в условиях конкуренции современного рынка часто некоторых историй не хватает, сперва я опишу, каких (всем известных, конечно), будет звучать как немного критики, потом проведу анализ конкурентов (ушедших с Российского рынка, что печально), но это не значит, что не появится новых, а потом покажу несколько решений описанных ниже трудностей.
Открытый фронт
Если концепт фронта - автогенерируемый, это значит что дизайн - привилегия исключительно вендора. Если мы говорим про личные кабинеты и конкурентоспособные продукты, то так делать нельзя. Порой дизайн - это единственное, чем можно конкурировать. Конечно, есть куча продуктов, для которых никакого дизайнера не будет, где достаточно автоматического интерфейса. Но это сужает область применимости до чрезмерно маленькой и уменьшает возможность конкурировать с альтернативными продуктами. Всё-таки возможность править css, и более тонко подстраивать элементы при необходимости должна быть. Я дальше покажу, как это сделано у конкурентов. К слову, выглядит фронт на 1С на мой взгляд достаточно неплохо, но для целей стилизации, доработки и роботизации это, конечно, кошмар.
К слову, даже SAP, известный своим игнорированием любых принципов UX/UI, уже научился делать это по-человечески в Fiori.
Популярный язык разработки
Главное требование к ЯП, конечно, массовость - чем больше человек на нём пишут, тем лучше. Кажется, массовость (которая, кстати, является следствием простоты и понятности) является лучшим критерием для попадания языка разработки в топ. Кроме массовости стоит также учитывать его тренд - нисходящий тренд обычно говорит о печальных новостях. Регулярная подготовка новых кадров вследствие признания общественностью - достаточно важный показатель для ЯП. Это важнее, чем концепция, скорость, работа с памятью и прочее. Язык должен быть удобен, люди на нём должны писать и много. В этом отношении язык 1С чувствует себя неплохо, ловушка только в том что он оказался несколько локальным - трудно представить подготовку кадров за пределами РФ... впрочем, если сравнивать, к примеру, с тем же ABAP - ему это не помешало. Самое главное, на 1С есть неплохое комьюнити разработчиков и поток обучения кадров, выстроенный десятилетиями. Это далеко не всегда удаётся даже таким гигантам, как Google (Dart - выживет или нет, Go - рост прекратился, а уже Rust пиарится). Конечно же, в современном мире с учетом всех OpenSource проектов и подготовки кадров уникальный синтаксис является скорее большим минусом, чем плюсом. Хорошо, что язык 1С появился давно, и уже возникло комьюнити. Если бы 1С "рождалось" сейчас, новый язык можно было бы посчитать ошибкой (несмотря на все минусы - ABAP в SAP, кстати, существует с 70х годов прошлого века).
Менеджер пакетов
pip, npm, nuget... Кажется, без них уже мы не представляем свою жизнь в классической разработке.
В 1С у нас есть Инфостарт и публикации вроде: //infostart.ru/1c/articles/709325/ //infostart.ru/1c/articles/252365/ //infostart.ru/1c/articles/336783/ //infostart.ru/public/100845/ и другие.
Только чтобы посчитать хэш или зашифровать не классическим алгоритмом, требуется куча времени хождения по мукам. Конечно, сейчас в фреймворке 1С отсутствие менеджера пакетов (а может, и возможности расширения их бинарными файлами) часто является очень большим тормозом для разработки.
NO Java
Не могу обойти стороной эту тему. В последних версиях в 1С Java стала фигурировать достаточно часто. Объективно, каких то проблем она не привносит, конечно.
Просто Java часто преподносится как "новое", хотя как раз в "новом" данный язык уже фигурирует крайне редко.
Видели новый рейтинг TIOBE:
ну и тренд устойчивый (stackoverflow trends):
Выражаясь языком трейдеров, java я бы "продавал". А если посмотреть ещё исследования JetBrains, то тренд становится очевидным.
Не говоря уже о том, что память, процессор в мире контейнеров и микросервисов ещё одна среда виртуализации для ЯП, пожалуй, уже явный оверхед. При этом разум как-то возвращается в IT мир (ну или деньги кончаются) и популярными становятся вновь языки C и C++, ну и их более современные собратия - Go и Rust. Но ладно, статья не про Java.
Гибкий ORM
На мой взгляд уровень абстракции 1С ORM сильно велик, от СУБД нас берегут, при этом уровень гибкости достаточно сильно завязан на предметную область. Концепт хорош, но в реальной жизни в прикладных решениях, "проживших долгую жизнь", 90% новых объектов - это справочники и регистры сведений, порой мало чем между собой отличающиеся. При этом ORM у нас один и использовать мы можем только его. На самом деле чуть бы гибкости для описания таблиц кодом, как во многих современных ORM + возможность прямых запросов, а для современного LowCode хотелось бы ещё и ODM, т.е. ещё и NoSQL источники.
Популярную IDE
Вообще мировой опыт показывает, что разработка IDE крайне редко бывает удачной. Кажется, пока получилось только у JetBrains и Microsoft (ну и у 1С, конечно).
Только в 1С у нас "тренд" в последнее время на Eclipse.
А если посмотреть на графике, Eclipse я бы "продавал" ещё лет 5 назад:
LowCode в IDE, конечно, не самая лёгкая задача, и тут может и JetBrains бы не справились. В этом отношении собственная разработка (EDT) - достаточно хорошая идея, только за основу, конечно, взять бы JetBrains или VSCode, а не Eclipse. Главное, конечно, не Web IDE, чтобы скорость разработки была приемлемой. Я бы ещё сказал "хорошая IDE должна быть нативной - на C++", но пример VSCode и JetBrains заставляет меня замолчать. Ну и, конечно же, вишенка на торте использования общепринятой IDE - это сервисы автоподстановки вроде https://github.com/features/copilot, которые интегрированы в современные IDE почти для всех ЯП (даже для 1С BSL), для исполнителя их, конечно же, не будет.
Cloud масштабируемость
С масштабируемостью в 1С весьма неплохо: есть мощный сервер приложений с балансировкой нагрузки и её распределением уже внутри - классический Enterprise
В последнее время популярен концепт "Cloud native" - приложение модульное (микросервисное), запихивается в контейнеры, по сути stateless - уронить это крайне сложно. ACID отдаёт предпочтение BASE и используется тоже некоторое масштабируемое Cloud хранилище. Тут справедливо сказать "как же так, в 1С нам нужен исключительно ACID". Что в целом справедливо, но чаще всего для очень незначительного числа операций. А в некоторых системах и вовсе не нужно (1С:Документооборот, к примеру, скорее всего может жить без требований ACID)
Что в мире современного LowCode
Gartner Magic Quadrant для LowCode выглядит примерно следующим образом:
Давайте бегло рассмотрим парочку:
Outsystems
Код можно писать на C# и использовать любые .net библиотеки!
https://www.outsystems.com/evaluation-guide/extending-with-custom-code/
Custom js и HTML доступны, ну и, кстати, все селекторы выглядят так же, как в IDE
https://www.outsystems.com/evaluation-guide/extending-the-ui-with-html-javascript-and-css/
Под капотом .NET Core (что намного лучше, чем Java).
C ORM всё несколько проще, поддерживается даже mongodb, но почему то PostgreSQL нет...
Ну и, кстати, с SAP интеграция из коробки. Правда, IDE тоже своя... видимо счастья не бывает :)
Mendix
Код можно писать на Java, конечно же, используя любые библиотеки. Можно разрабатывать в Eclipse:( https://docs.mendix.com/refguide/java-programming/
Есть Deploy в Кубер - т.е. оно cloud native из коробки. Это конечно весьма приятно. https://docs.mendix.com/developerportal/deploy/run-mendix-on-kubernetes/
CSS и HTML и JS при желании можно редактировать https://docs.mendix.com/howto/front-end/customize-styling-new/
СУБД поддерживаются практически все реляционки. C ORM в целом тоже беда.
Интеграции из коробки с SAP и SalesForce. В общем, неплохая такая штука.
SAP Fiori
https://www.sap.com/products/technology-platform/fiori.html
Как видите, интерфейс уже весьма неплох. Не тот SAP, к которому мы привыкли:
Но и процесс разработки уже не отличается и больше напоминает web разработку с элементами LowCode:
Но, заметьте, IDE - VS Code.
AppSmith
Его нет в Magic Quadrant, но общую логику LowCode решений из квадрата Gartner вы уже, надеюсь, поняли.
Для меня AppSmith кажется наиболее приятным LowCode – всё «сделано с любовью».
Начать, наверное, стоит с условий:
- OpenSource (в базовом своём варианте)
- OnPremise установка
- Возможность «выгрузить» приложение, разработанное для Cloud
По возможностям прямо просто «всё как надо»:
- Полная гибкость стилизации фронта при желании, при этом набор готовых компонент
- Возможность использования произвольного js кода (включая js библиотеки)
- Возможность использования произвольного Rest API – с удобным интерфейсом его подключения и отладки
- В принципе есть возможность использовать любой произвольный Backend, включая Airtable, что делает процесс создания приложений весьма простым и приятным
- Полный адаптив всех элементов «из коробки» включая возможность его кастомизации
- Готовые шаблоны приложений
- Возможности добавления своих шаблонов и компонентов
При всей мощности у AppSmith удобный визуальный конструктор, обеспечивающий полный цикл создания фронтенд части приложения (да и бэкенд, в принципе, тоже).
Разработать приложение можно действительно без кода, но при усложнении логики возможности кастомизиации практически не ограничены. Именно так должен выглядеть успешный LowCode (на мой взгляд, конечно):
Каждое событие и каждое свойство можно описать как конструктором, так и кодом JS, и конструктор, конечно, преобразуется в код
Более того, ребята уже позаботились об интеграции какого-то подобия ChatGPT для написания чуть более сложных фрагментов кода:
Появляется окошко, где вы текстом описываете что вам нужно.
При этом для Backend части у вас простор для манёвра. 1С нам в качестве бэкенда вполне подходит:
В чём преимущества:
- Мы из коробки получаем «админку даных» - возможность гибкой и удобной работы с любой таблицей из интерфейса (AirTable тоже содержит много подобных возможностей, кстати, но всё-таки не настолько гибко и продуманно – всё таки «за плечами» 1С десятки лет эволюции)
- Разработка API, конечно же, быстрее – работа с моделями данных инкапсулирована от нас, многие вещи делаются визуально.
- У нас «из коробки» поддержка нескольких СУБД, авторизация, кластеризация, логирование, ролевая модель и ещё много всего накладного, что обычно приходится реализовывать в случае разработки backend «с нуля».
Итого – получаем весьма и весьма неплохой инструмент для разработки «internal tool». Ограничение: когда за него придётся всё-таки заплатить денег – если вы готовите приложение на продажу. Убрать значок AppSmith, подключить SSO, расширенную ролевую модель. Всё это потребуется уже если вы делаете сервис для внешнего использования. Так или иначе, для серийного saas для внешних клиентов я бы всё-таки рекомендовал другую модель разработки – к которой мы в итоге пришли. AppSmith мы используем для своих внутренних инструментов – без широкого позиционирования (для внутреннего использования и для клиентов), а для решений, которые продвигаются как самостоятельный saas – мы выбираем
Модель «компонентный фронт» + «1С на Backend»
Фронтентд часть приложения при этом – классическое SPA на Angular с использованием компонент PrimeNG (в нашем случае). Это позволяет не слишком сильно заморачиваться с разработкой (каждый компонент с его логикой и поведением дело не простое).
Также для сложной логики табличных частей можно использовать AgGrid – классная штука, которая по своим возможностям практически не уступает гриду от 1С.
В этой модели разработки мы получаем:
- Всю простоту и гибкость 1С на Бэкенде
- То, чего у 1С нет во всех текущих решениях:
- Возможность произвольной стилизации и дизайна фронтенд части
- Возможность использования готовых компонент и решений на фронтенд части
- То, что является проблемами в текущих LowCode решениях
- Бесплатный фронт, в т.ч. для коммерческих решений
Да, фронтенд разработчики в этом случае вам, конечно, потребуются, но у нас в команде EmplDocs их, к примеру, 1 к 5. И скорее всего будет 1 к 10 и более.
Настройки форм, которые отрисовывает фронт, задаются на стороне 1С. Нам это открывает практически неограниченный простор для маневра:
И в этом случае 98% внедрения происходит без всяких доработок, ещё почти 2% решается доработками 1С, а фронт часть мы трогаем только в редких случаях и в основном из продуктового стрима задач.
Для рядового сотрудника всё выглядит при этом вполне красиво:
Это решает проблему стилизации и закрытого фронта.
Если кажется, что Web разработка сложна и что-то подобное у вас никогда не получится - просто попробуйте, к примеру, вот эту штуку:
В пару строк подключаете ODATA любого списка 1С и вот вам готовое приложение с "почти BI" инструментарием, заодно можете увидеть Grid, в принципе сопоставимый по функционалу с 1С-ным:
Так и вся современная Web разработка уже основана на готовых моделях, компонентах и паттернах.
Конечно, реализовать логику, сопоставимую с любым прикладным решением 1С, достаточно сложно, да и не нужно. Но вот устранить некоторые внешние проблемы вполне можно.
Итого:
Донести я хотел буквально несколько мыслей. Получилось или нет, можете написать в комментах, краткое содержание:
- Нужен красивый фронт к 1С, можно сделать LowCode - бесплатный AppSmith крутая штука
- Нужен красивый фронт к 1С, который хочется продавать - делайте конструируемый на компонентах, это не так сложно, как кажется, а профита очень много
- ACID не панацея и нужен не везде, можно использовать сторонние СУБД
- Золото LowCode в том, что в нём всё-таки можно Code :)
- Идеальных IDE не бывает, но, кажется, VSCode таки неплох
- Java умрёт, а 1С 9 захватит мир :)))