Компания Liferay выпустила очередную версию своей портальной платформы Liferay CE 7.4.3 и гордо заявила в анонсе что это теперь полноценное No Code решение. Так ли это на самом деле?
Вообще No Code - классная штука! Как человек, отработавший с 95-ого года программистом, а теперь вынужденный продавать ПО я прекрасно вижу как это выглядит
Смотрите какая у нас классная No Code платформа! Как она классно делает "Hello World"!
Круто! А сколько она стоит?
Ну миллион (всего!) за лицензию, плюс миллиард на внедрение, плюс квадрилион чтобы научить ваших менеджеров на ней ваять приложения! Но зато потом вы сможете уволить всех ваших программистов! (А вы видели какие сейчас у программистов зарплаты???)
Отлично! Продано!
А потом, где-то через полгода они приходят к единственному оставшемуся программисту (тот просто прикинулся сисадмином, когда под гребенку увольняли всех программистов за ненадобностью) со словами:
"У нас тут есть крутая No Code платформа, мы на ней круто сделали "Hello World". Но нам теперь надо сделать "Привет мир!" - а она не умеет. Исправь - "Тыж программист!"
И человек долго и муторно пытается вкорячить в платформу то, что на нормальном стеке делается за полчаса. Применяет все возможные подходы нетрадиционного программирования, через две недели достигает нужного результата, но чувствует себя нетрадиционным программистом. И уходит из компании вслед за остальными.
Так что, если вашему руководству кто-то продал идею No Code - как серебряную пулю для решения ВСЕХ задач - лучше сразу идти обновлять резюме на HH и ХабрКарьере - ничем хорошим эта история не закончится. Это будет не серебряная пуля - а золотой гвоздь, в крышку гроба (или у кого-то есть успешный опыт?).
НО! На самом деле в мире есть место и для Ноу Кода, просто надо правильно применять инструменты. Если вам нужен простой сайт - глупо сажать за него команду программистов на React - в условной Тильде вы и сами сможете накидать его, причем значительно быстрее. No Code хорош там, где надо быстро сделать что-то простое и максимально стандартное.
Чтобы система называлась No Code, в моем понимании в ней должны быть следующие компоненты (как минимум):
Инструмент для описания объектной модели
Инструмент для описания поведения (бизнес-логики)
Инструмент для создания интерфейсов
А как с этими инструментами у Liferay?
Начнем с конца. С интерфейсами у Liferay все более чем хорошо. Это в первую очередь конструктор страниц (а-ля Тильда) с возможностью накидывать страницы из готовых компонент буквально за секунды.
Это и редактор форм, не идеальный, но достаточно мощный инструмент (с гибким layout-ом полей, возможностью разбить на страницы - wizard, с разными типами полей, валидацией, масками и зависимости полей друг от друга). С его помощью можно делать действительно сложные формы.
В целом тут все хорошо, можно при помощи мышки и драг-н-дропа создавать веб-интерфейс.
С поведением чуть хуже. В Liferay есть возможность привязать к тем же формам бизнес-процессы, но встроенная реализация движка бизнес-процессов - Kaleo, как бы это сказать, слишком базовая. У нас в Incomand мы обошли это тем, что вместо Kaleo вшили в портал движок Flowable (многие знают Camunda - так вот Flowable - это его двоюродный брат-близнец - оба форки от Activiti, только Camunda форкнулась на полтора года раньше). С полноценной нотацией BPMN - а на ней можно много чего сделать (кто работал с той же Camunda - не дадут соврать).
Остался вопрос с объектной моделью - и вот тут были проблемы. Дело в том, что те же формы хранили все свои данные в одной таблице в одном поле (в формате JSON). Если тебе надо просто собрать какие-то данные - это норм. Но вот если тебе с ними потом еще как-то работать - это уже большая проблема.
Давно (еще в версии 6.x) в Liferay был разработан механизм динамических объектов (Dynamic Data List) - те же формы, только вид с боку. Но и там все хранилось в одной таблице в одном поле - в формате XML. С аналогичными проблемами.
И вот, в последней версии 7.4 (7.4.3 если быть точным) появились они - Liferay Objects! Это редактор объектной модели, который честно создает под каждый объект отдельную таблицу. Свершилось! Или?
Как только появился тег в гитхаб, я пошел качать и тестировать версию, еще не дожидаясь официального релиза. Даже написал на сайте официальный анонс. НО - официальный сайт - официальным сайтом, а реальность не так хороша как хотелось бы.
С одной стороны - да, все заявленное есть:
Можно создавать новые объекты;
Можно задавать для объектов поля разного типа с различными атрибутами (например обязательность);
Можно создавать связи между объектами (генерируются Foreign Key-и);
Поддерживается локализация (имена объектов и полей можно задавать на разных языках);
Поддерживается workflow - при создании объекта можно запустить бизнес-процесс;
Для объектов генерируется удобное REST API...
В целом можно сказать что необходимый минимум есть (мы с вами помним - что No Code - это все-таки для относительно простых, типовых задач).
Но, самое интересно начинается когда мы переходим на вкладку Layouts - тут можно задать формы для работы с объектом
И тут меня настигло удивление и разочарование. Вместо ожидаемого редактора форм, который Liferay разрабатывает уже несколько лет, и в котором реализовал все что только можно, нас ждет какой-то совсем новый редактор с ООООООЧЕНЬ базовым функционалом. Создать на нем что-то вменяемое, чем смогут пользоваться обычные пользователи - нереально.
Дальнейшее изучение все ставит на свои места. Работа с созданными объектами доступна только из панели управления (при наличии прав). Разместить где-то на странице сайта список созданных объектов - нельзя. Получается что и формы редактирования объектов - это в первую очередь для администрирования (а админам то что, они все стерпят!).
А что для конечных пользователей? Ну так вот же крутое REST API, садитесь, пишите приложение на React/Angular/Vue (выбираем по вкусу), встраивайте в портал - и будет вам счастье.
Разумно? Да, но это уже совсем не No Code платформа.
Итог? Пока печален. По факту в Liferay есть все компоненты для того, чтобы называться No Code платформой. Но, так как они не связаны между собой - получаем ни то ни се.