В последнее время большое количество крупных мировых поставщиков бизнес-приложений ушли с российского рынка. Например, SAP, Microsoft и Oracle. Однако, много их решений все еще используются в российских компаниях. За время их работы накопилась значительная экспертиза по их доработке и поддержке как внутри компаний, так и в ИТ-интеграторах. Можно продолжать использовать их еще определенное время, но никто не защищен от внезапных проблем, которые, например, случились с Meraki.

К сожалению, основная проблема в том, что для многих узкоспециализированных решений от крупных мировых поставщиков не существует готовых российских аналогов. И одним из немногих выходов в таком случае является создание нового решения “с нуля”. Однако, разработка с использованием классических языков программирования занимает много времени и человеческих ресурсов, что в условиях значительного оттока ИТ-специалистов в РФ является существенной проблемой. 

Одним из решений этих проблем является использование платформ для быстрой разработки приложений (RAD). В этой статье сделан краткий обзор современной открытой и бесплатной платформы lsFusion, которая очень хорошо подходит для решения вышеописанных задач. При этом платформа может быть запущена с использованием исключительно программ из Единого реестра российского ПО (Astra Linux, Liberica JDK, Postgres Pro). При этом лицензия платформы позволяет создавать собственные решения на ее основе и вносить их в реестр.

Область применения

Платформа lsFusion предназначена для быстрой разработки бизнес-приложений. Распространяется под лицензией LGPL v3. Исходный код платформы доступен на Github.

Лучше всего lsFusion подходит для создания сложных систем с большим количеством разнообразных сущностей и форм, в которых требуется ввод и обработка значительных массивов данных. Однако, также платформа может быть использована и для быстрого создания простых приложений вместо Excel-таблиц, функциональности которых уже недостаточно.

В то же время использование платформы не даст большого преимущества при разработке приложений, направленных на взаимодействие с большим количеством “внешних” пользователей или без необходимости каких-либо сложных вычислений. Также следует учитывать, что в качестве веб-интерфейса используется одностраничное приложение с использованием JavaScript. Поэтому платформа lsFusion не очень хорошо подходит для создания, например, веб-сайтов.

Аналоги

На данный момент на рынке существует несколько платформ для решения похожих задач. На примере решений от Microsoft, из давно используемых можно выделить Access и Visual Foxpro. Более современными аналогами являются low-code платформы вроде Power Apps. Однако помимо того, что они все являются проприетарными системами, подходы к разработке приложений, используемые в них, сильно отличаются от тех, что заложены в платформу lsFusion. В частности, в ней практически не используется визуальное программирование, а вся логика задается при помощи высокоуровневого языка.

Парадигма

Большинство современных платформ используют стандартную реляционную логику, в который структура приложения задается при помощи сущностей и связей между ними. В lsFusion вместо сущностей используются классы, которые могут наследоваться один от одного. Поля и связи же задаются при помощи так называемых свойств. Свойства по сути являются функциями, которые принимают в качестве параметров объекты классов, возвращая при этом либо значения примитивного типа (поля), либо другие объекты (связи). Поле в таблице с несколькими ключами из реляционной логики будет представлено в виде свойства с соответствующими объектами в качестве параметров.

Все свойства делятся на две категории :

  1. Первичные. Вводятся в систему непосредственно пользователем, и напрямую не зависят ни от каких других свойств.

  2. Вычисляемые. Рассчитываются при помощи определенных операторов на основе других свойств.

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

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

При помощи механизма событий можно выполнять определенные действия при наступлении заданных условий.

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

Язык

Поскольку парадигма платформы значительно отличается от существующих подходов, для задания логики был создан специализированный язык. Для снижения порога входа в разработку был выбран SQL-подобный синтаксис с ключевыми словами вместо символов.

Логика приложения задается в виде плоских текстовых файлов, которые называются модулями. В этих файлах содержится исходный код на внутреннем языке. В каждом модуле может одновременно находится объявление как классов и свойств, так и форм, событий, ограничений, дизайна и так далее. Между модулями можно указывать зависимости. При этом исходный код может использовать элементы только из тех модулей, от которых он зависит (в том числе и рекурсивно).

Ниже показаны примеры синтаксиса :

Классы и первичные свойства
Классы и первичные свойства
Вычисляемые свойства
Вычисляемые свойства
Действия и события
Действия и события
Формы
Формы

Больше различных примеров синтаксиса языка и вариантов использования можно найти по ссылке.

Архитектура

Платформа lsFusion состоит из двух Java-приложений. Для их выполнения в операционной системе должна быть установлена виртуальная машина Java.

Первое является сервером приложений, который считывает созданную разработчиком логику программы из определенных файлов. Эти файлы имеют расширение lsf, и содержат в себе исходный код, написанный на внутреннем языке платформы. В них описываются как доменная логика, так и пользовательский интерфейс. Структура проекта выглядит следующим образом :

Структура проекта MyCompany
Структура проекта MyCompany

Второе приложение представляет собой Apache Tomcat, с развернутым на нем веб-сервером, который обеспечивает функционирование веб-приложения. Оно взаимодействует с сервером приложений через RMI-запросы по внутреннему протоколу.

Как разрабатывать

Разработка приложения на lsFusion ведется при помощи специального плагина к IntelliJ IDEA Community Edition. Плагин подсвечивает синтаксис и ошибки, поддерживает навигацию и рефакторинг исходного кода.

Структура проекта на lsFusion аналогична структуре любого java-приложения. Исходный код на внутреннем языке выступает в роли обычных ресурсных файлов, которые не требуют компиляции.

Благодаря тому, что платформа построена на базе Java, а исходный код имеет плоскую текстовую структуру, при разработке можно использовать Git, Maven, а также подключать внешние Java классы и библиотеки для решения узкоспециализированных задач.

Как это работает

В качестве системы хранения данных используется реляционная СУБД PostgreSQL. 

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

Исходя из кода на языке lsFusion платформа автоматически генерирует все SQL-запросы для чтения и записи данных, не используя никаких ORM паттернов. Таким образом, практически все вычисления производятся не на сервере приложений, а в PostgreSQL.

Изменения, сделанные внутри сессии (например, при редактировании данных пользователем на форме), записываются во временные таблицы. В момент сохранения сессии изменений (например, при нажатии кнопки Сохранить) начинается транзакция, выполняются события, и изменения записываются в базу данных.

Отличительной особенностью платформы lsFusion является то, что для любого вычисляемого свойства можно установить флаг MATERIALIZED. Для такого свойства создается отдельное поле в таблице, которое автоматически пересчитывается в момент изменения данных, от которых оно зависит. В то же время при расчете значений зависимых свойств будет использоваться уже подсчитанное значение из этого поля. Таким образом можно легко балансировать нагрузку на базу данных по записи и чтению без изменения логики системы. Эта возможность похожа на логику Materialized View с опцией Fast Refresh в Oracle только без каких-либо ограничений.

Для кого предназначена

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

Такой высокоуровневый подход позволяет значительно снизить порог вхождения в разработку приложений. Благодаря этому создавать приложения могут люди без наличия какого-либо опыта программирования. Для базового изучения платформы lsFusion достаточно одной недели, а уже через месяц разработчик может создавать уже достаточно сложные приложения. Это достигается за счет того, что платформа оперирует небольшим количеством абстракций, на основе которых можно задать практически любую бизнес-логику. Разработчику достаточно научиться определять классы (сущности), строить свойства с помощью нескольких основных операторов, и собирать из них формы.

Возможности

ООП

Платформа lsFusion поддерживает множественное наследование классов и полиморфизм сразу по нескольким параметрам. Например :

Полиморфизм по нескольким параметрам
Полиморфизм по нескольким параметрам

Объявление абстрактного свойства и его реализация могут находиться в разных модулях. Это позволяет разрабатывать систему с архитектурой, соответствующей принципу "низкая связанность - высокое зацепление".

Печатные формы

Генерация печатных форм, текстовых документов и электронных таблиц осуществляется при помощи библиотеки JasperReports. Платформа может автоматически генерировать сложную структуру отчетов и подотчетов, а разработчику остается только визуально настроить расположение элементов при помощи JasperSoft Studio.

API

Платформа поддерживает отправку и прием запросов по HTTP-протоколу. В совокупности со встроенным механизмом по экспорту и импорту файлов в формате JSON/XML можно легко организовать взаимодействие с любыми внешними системами.

Расширение

В случае, если задачу невозможно решить штатными средствами платформы, существует возможность использовать нижележащие языки программирования. В частности, можно создавать свойства, вычисления которых реализуются на языке PL/pgSQL, которые затем встраиваются в SQL-запросы. При помощи Java можно создавать узкоспециализированные действия. На JavaScript можно создавать специфические визуальные элементы для свойств и объектов.

Интерфейс

В любой таблице формы пользователь может самостоятельно сортировать и отбирать строки, прятать колонки и изменять их порядок. Отобранные данные из любой таблицы можно выгрузить в электронные таблицы одной кнопкой. Навигация по записям таблиц реализована в виде “бесконечного скроллирования”. 

Помимо изменения значения любой ячейки пользователь может изменить значения во всех записях при помощи механизма групповой корректировки. Кроме того поддерживается вставка в таблицу из буфера обмена.

Пример интерфейса
Пример интерфейса

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

Pivoting
Pivoting

С чего начать

Сперва нужно установить платформу lsFusion для разработки на локальный компьютер. Под Windows есть инсталлятор, который установит на компьютер PostgreSQL, Java, IntelliJ IDEA, и непосредственно платформу. Затем нужно создать пустой проект lsFusion в IDEA.

Изучение языка lsFusion лучше всего начинать на основе примеров, описанных в разделе How-to, а также двух простых примеров : Турнирная таблица и Управление материальными потоками.

В дальнейшем можно изучить исходный код приложения MyCompany, которое реализует базовую логику простой ERP-системы. Это решение распространяется под лицензией Apache-2.0, и может быть использовано как основа для разработки собственной системы.

Посмотреть демо-версию можно по адресу : https://demo.lsfusion.org/mycompany-ru.

Заключение

Платформа lsFusion разрабатывается уже 12 лет. За это время было реализовано большое количество приложений на ее основе : от самых простых приложений на несколько форм до сложных ERP-систем с тысячами пользователей и процессов. Разработка платформы финансируется за счет компаний, создающих собственные коммерческие решения на ее основе.

lsFusion подходит для создания приложений как отдельным программистам, так и большим командам за счет высокой декларативности, поддержки ООП и возможности использования Git. Лицензия позволяет как разрабатывать внутренние приложения для компании, так и коммерческие продукты на ее основе. В частности, на платформе разработаны и успешно внедряются в компаниях России, Беларуси и Узбекистана следующие коммерческие продукты :

  • lsFusion ERP. Решения для управления предприятиями розничной торговли.

  • lsFusion WMS. WMS-система для любого бизнеса.

Для прямой связи с разработчиками платформы, как и в других opensource проектах, можно использовать Github, StackOverflow, а также Slack и Telegram.

Комментарии (28)


  1. exwill
    13.04.2023 08:09
    +1

    Время переходить на GPT. Как у lsfusion с GPT?


    1. CrushBy Автор
      13.04.2023 08:09
      +2

      Кстати, забавно. Я пробовал за 15 вопросов Bing обучить делать простую группировку. В принципе получалось более менее, но проблема в том, что их сетка обучена фактически только на документации, а там есть несколько разных вариантов синтаксиса. В итоге она начинала их путать и получалось неправильно.

      В этом плане проверить ИИ на неизвестном языке интереснее, так как по распространенным языкам она фактически просто пишет стандартные реализации по примерами и сложно проверить "мышление".


      1. hudyakov74
        13.04.2023 08:09

        GPT пока о Fusion не знает, но по мне, он гораздо более GPT-ready чем многие многие другие.


        1. AlexeyPolunin
          13.04.2023 08:09

          Угу, сейчас упрощенные DSL имеют некоторое преимущество в том, что проще объяснить GPT как писать правильно. Он же правда и недостаток, тк приходится передавать свою документацию в контекст. Но непонятно сколько такая ситуация продержится.


      1. exwill
        13.04.2023 08:09
        -1

        А не надо мышления. Достаточно того, что GPT может превратить текст на человеческом языке в текст SQL запроса. Остальное - дело техники


  1. DikSoft
    13.04.2023 08:09

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


    1. CrushBy Автор
      13.04.2023 08:09
      +1

      В любом случае, lsFusion более универсальное решение, чем 1С, так как оперирует не прикладными сущностями вроде Справочник/Документ/Регистр, а более абстрактными Класс и Свойство.

      На lsFusion делали много разных решений - ERP-системы, WMS-решения, системы обработки заявок и управления процессами, time-tracking и разные другие. Кроме того, знаю некоторые просто брали ее как backend-систему, а делали фронтенд на чем-то другом общаясь через HTTP API.

      Понятно, что социальную сеть не стоит делать на lsFusion, но сфера применения достаточно большая.

      У 1С есть, как минимум, один большой минус - это проприетарность. Помните недавний прикол с лицензиями ? И никто не гарантирует от таких проблем в будущем. А кроме того, есть еще много других технических минусов.


      1. DikSoft
        13.04.2023 08:09
        +2

        В целом верно, но если рассмотривать задачу быстро свалить с платформы, которая более не поддерживается, то стоит оценить, куда будет быстрее, надёжнее и к конечном итоге дешевле уйти. На OpenSource с малым количеством специалистов и непонятной перспективой дальнейшего развития, или на платное, но поддерживаемое решение.

        Я не топлю за 1С, просто вопрос TCO при OpenSource решениях почему-то чаще всего предлагают не рассматривать подробно. Якобы, Open - значит заведомо дешевле. Но подводных камней в этом вопросе очень много. И некоторые могут оказаться весьма неприятными.


        1. CrushBy Автор
          13.04.2023 08:09
          +2

          Я не топлю за 1С, просто вопрос TCO при OpenSource решениях почему-то чаще всего предлагают не рассмматривать подробно. Якобы, Open - значит заведомо дешевле. Но подводных камней в этом вопросе очень много. И некоторые могут оказаться весьма неприятными.

          Open-source - это не только про деньги. Это про политику лицензирования в том числе. Я знаю одну компанию, которая долго разрабатывала кое-что на 1С, а потом 1С так хитро изменили условия лицензий, что все затраты стали по сути экономически необоснованными.

          Например, вот сделали вы SaaS решение на 1C. А потом 1С меняет условия лицензирования, а клиентам Вы не можете повысить цены. Что тогда делать ? Или, например, просто запретит через SaaS работать и заставит перейти на Fresh...


          1. DikSoft
            13.04.2023 08:09
            +1

            Open-source - это не только про деньги. Это про политику лицензирования в том числе.

            В конечном итоге - всё про деньги. Разработка, поддержка, развитие, исправление багов, добавление функциональных возможностей, вопросы совместимости и т.п. Считать нужно всегда.


            1. hudyakov74
              13.04.2023 08:09

              1с выпустила упп в 2004, erp в 2014. в силу универсальности решения первые три года вообще нельзя брать такие коробки. итого замена упп в реальности пришла через 7 лет. вычтя пару лет внедрений - получается срок службы программы около 8 лет (erp тоже отстоятся должна 3 года). в итоге что 1с придумает в 2024 году никому не известно. лучше не полагаться всем бизнесом на "единую" программу. хороша 1с в качестве бух учета - используем. но чтоб на многодесятковмиллионные внедрения попадать каждые 10 лет целому бизнесу и колбасится по 2-3 года - увольте. Было время в около двухтысячных - каждая контора писала себе зарплату... ругали подход... ладно. зарплата типовая теперь, бухгалтерии плюс минус по ПБУ. но что касается бизнес процессов - как сидели программисты так и сидят на предприятиях - потому что типовые процессы - это потеря конкурентности. Попадания на перевнедрения - потеря конкурентности. так что многие куски автоматизации предприятия можно держать на чем угодно. и желательно с повышением производительности труда и программистов и пользователей. у производительности труда программистов в 1с не все так хорошо по моему...


            1. CrushBy Автор
              13.04.2023 08:09

              В конечном итоге - всё про деньги

              Это слишком большое упрощение. Дело скорее в "зависимости" от кого-то. Деньги-то можно посчитать. А вот как посчитать вероятность того, что владелец лицензии может убить весь бизнес, например, просто отозвав лицензию по какой-то причине. Например, как тот же пример с Meraki.


              1. DikSoft
                13.04.2023 08:09
                +1

                В целом я про это и написал. "Владелец" Open Source проекта точно также может забить на свой продукт, а поднимать и тащить дальше самостоятельно целую платформу может оказаться слишком накладно.


                1. CrushBy Автор
                  13.04.2023 08:09
                  +1

                  Если даже "Владелец" забьет, то можно просто продолжать использовать в том функционале, в котором есть. Даже, если какие-то критичные баги, то всегда можно форкнуть и поправить. А вот с проприетарным такой трюк не пройдет. Например, вот нужно вам новую клиентскую лицензию SAP, а фиг вам. И что дальше ? Ломать ?


                  1. DikSoft
                    13.04.2023 08:09
                    +1

                    Даже, если какие-то критичные баги, то всегда можно форкнуть и поправить.

                    Может и можно, но скорее всего - нет.
                    Риск в том, что может тупо не хватить ресурсов, чтобы "бесплатный" продукт починить или кастомизировать, как нужно.

                    Проприетарные продукты приносят свои риски, это факт. Но идеализировать Open Source всё же не стоит. Иногда бесплатное может оказаться очень дорогим по совокупной стоимости владения.


                    1. CrushBy Автор
                      13.04.2023 08:09

                      Может и можно, но скорее всего - нет.

                      Ну опять же возвращаемся к тому, что все упирается в деньги. Для любого open-source продукта можно найти исполнителя, который поправит важный критический баг (если вообще никак нельзя найти workaround, что маловероятно). Даже в правке lsFusion можно найти стороннего java-программиста, который с нуля разберется в конкретной проблеме и поправит. Да, у него может уйти неделя-две-месяц, но поправит.

                      А вот когда вам лицензии заблокируют, то вам придется очень быстро и очень резко менять ВСЕ. Что в разы дороже.


                      1. DikSoft
                        13.04.2023 08:09
                        +1

                        Для любого open-source продукта можно найти исполнителя, который поправит важный критический баг

                        Что один человек собрал, другой завсегда разобрать сможет (C)

                        Вопрос цены. Она внезапно может оказаться неподъемной. А сроки критичными. И придётся точно так же "резко менять всё".


                      1. CrushBy Автор
                        13.04.2023 08:09

                        Вопрос цены. Она внезапно может оказаться неподъемной. А сроки критичными.

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

                        Мы, кстати, так и делаем. В платформе используется много open-source библиотек (и поэтому меньшими усилиями во многих аспектах lsFusion гораздо лучше 1С, например, в IDE).

                        Так вот часть из них мы сами патчили, даже не для фикса багов, а просто когда нужен был какой-то функционал. И подключали себе эти патчнутые библиотеки.

                        А в проприетарном что ? Ждать пока в какой-то релиз разработчик соизволит добавить фикс ? Многие баги в 1С для некоторых клиентов критичны. И что ? Быстро 1С их решает ? Некоторые баги годами не закрываются...


                      1. freeExec
                        13.04.2023 08:09

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


                      1. DikSoft
                        13.04.2023 08:09

                        и тут сразу критичный баг, невероятно.

                        Ну почему же. Вполне рядовая ситуация. Стандарты бывает меняются, какие-то фичи становятся deprecated, например TLS 1.0.


                      1. NitroJunkie
                        13.04.2023 08:09
                        +1

                        Не только. Может просто количество данных дорасти до какого то объема, после чего выплывает какой-то баг. Или какие-то новые данные / процессы появляются. В общем-то вариантов масса.

                        Нам так например один раз пришлось оперативно postgres'ый jdbc драйвер патчить.


  1. dyadyaSerezha
    13.04.2023 08:09
    +1

    Все же странно читать, что некто предлагает использовать RAD как замену "SAP, Microsoft и Oracle".


    1. NitroJunkie
      13.04.2023 08:09

      lsFusion это не совсем про RAD. Точнее я бы сказал основное применение обратное, за счет очень высокой модульности, целостности и производительности больше всего преимуществ можно получить на сложных (аля ERP), постоянно меняющихся, интегрированных single-instance решениях с огромным количеством данных (аля банки / retail). Ну а за счет простоты (высокой декларативности) есть вероятность обучить ему ChatGPT в будущем :)


    1. CrushBy Автор
      13.04.2023 08:09

      Я не предлагаю использовать RAD как замену "SAP, Microsoft и Oracle". Я предлагаю разработать на RAD замену определенным модулям "SAP, Microsoft и Oracle". Учитывая, что часто используется 10% от функционала, а скорость разработки на lsFusion в разы выше, чем классическая, то это вполне возможно.


      1. dyadyaSerezha
        13.04.2023 08:09
        +1

        Заменить Oracle SQL? Word? Excel? Teams?


        1. CrushBy Автор
          13.04.2023 08:09

          В данном контексте имелось ввиду конечно же разные модули Oracle E-Business Suite, SAP R/3,R/4 и Microsoft Dynamics.

          Но в самом предложение речь шла об уходе именно компаний, а не продуктов. Соответственно, RAD помогает заменить некоторые из их продуктов.


  1. MiIs
    13.04.2023 08:09

    Еще ранее, вроде бы даже на LOR, я уже указывал вам на недостатки фреймворка - 1. Страшненький UI (который непонятно как развивать и расширять) 2. JVM. 3. Отсутствие "крупных" ERP-приложений на фремворке. По п. 1 все как было плохо, так и осталось. По п. 2 трудно заменить, но JVM, Oracle как-то не совсем вяжутся с такими понятиями как "современное", "Россия" и "open source" (потому что разработка JVM контролируется Oracle, кто бы что ни говорил - а это риск и большой риск в России) По п. 3 вроде бы какие-то работы велись, но ничем значительным это не окончилось. Что-то вроде 1С Бухгалтерия не появилось. Хотя начиналось всё очень неплохо - на Хабре были очень завлекательные статьи, рекламирующие фремворк. Но вот практическая реализация подкачала. Удачи вам. Вы молодцы - не ошибается тот, кто ничего не делает.


    1. CrushBy Автор
      13.04.2023 08:09

      Смотрите по пунктам :

      1. Хоть в ERP дизайн не столь важен, но сейчас как раз делаем дизайн под bootstrap. В ближайшее время будет в мастер ветке, а потом и в 6й версии.

      2. Java - самый, что ни есть open-source, а его форк Liberica JDK есть в реестре отечественного ПО. Об этом упоминалось в статье. При этом в последнее время все-таки Java довольно активно развивается и по возможностям язык значительно улучшается. Но опять же, сама Java в данном случае под капотом. При разработке на lsFusion знание Java не требуется от слова совсем.

      3. Есть крупное ERP-приложение для розничной торговли. Бухгалтерия - один из модулей, но его создание экономически бессмысленно. Нет никакого резона конкурировать с 1С в этом сегменте.

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