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

Скорость разработки
icon

Один язык работы с данными

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

Одна парадигма работы с UI

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

Обращение сервера к клиенту

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

No ORM, Yes SQL

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

События изменения данных

Платформа позволяет создавать обработки событий изменения любых (в том числе вычисляемых) данных. Использование этого механизма позволяет значительно повысить модульность создаваемых решений.
icon

Динамическая физическая модель

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

Ограничения любых данных

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

Абсолютная реактивность

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

Кроссплатформенность сервера

Поддерживаются любые ОС, для которых существуют реализации JVM, а также наиболее распространенные реляционные СУБД.
icon

Открытая структура БД

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

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

В платформе поддерживаются одновременно и десктоп и веб клиенты. Для десктоп-клиента, как и для сервера, поддерживаются любые ОС для которых существуют реализации JVM. Также, благодаря тому что для расположения компонент используется относительное (а не абсолютное) позиционирование, их отрисовка в веб-клиенте осуществляется нативно средствами CSS (без использования JavaScript), что значительно повышает отзывчивость интерфейсов при работе в веб-клиенте. Кроме того, ни десктоп, ни веб-клиент не содержат никакой прикладной логики, что значительно упрощает их развертывание (то есть можно использовать один и тот же клиент сразу для всех логик).
icon

Декларативная работа с внешними форматами

Любую форму в платформе можно не только показать пользователю в интерактивном режиме или распечатать, но и экспортировать в файл любого из наиболее распространенных форматов данных (JSON, XML, CSV, XLS, DBF и т.п.). Причем эта операция симметрична, и, соответственно, можно, наоборот, импортировать информацию из файла любого из перечисленных форматов обратно в форму. Оба процесса при этом абсолютно декларативны и работают с теми же понятиями, которые используются при работе с UI, тем самым значительно упрощая взаимодействие с внешними системами.
icon

Эффективное общение клиента с сервером

Общение клиента с сервером на физическом уровне построено таким образом чтобы минимизировать количество синхронных round-trip обращений (то есть одно действие пользователя - один запрос-ответ, по возможности асинхронный). Помимо этого в десктоп-клиенте все передаваемые данные архивируются и, при необходимости, шифруются. Также, при общении клиента с сервером (как десктоп-клиента через TCP/IP протокол, так и веб-клиента через HTTP протокол), в платформе обеспечивается гарантия доставки, то есть в случае если какие-то запросы теряются, платформа посылает их повторно, причем с гарантией того, что они будут обработаны в правильном порядке. Все вышеперечисленное позволяет платформе эффективно функционировать даже на узких и ненадежных каналах связи, а также каналах связи с большим временем отклика.
icon

Прозрачная интеграция

Платформа поддерживает обращение к системе через самый распространенный прикладный протокол общего назначения (HTTP), при этом интерфейс обращения включает в себя не только выполнения некоторого действия (с автоматическим разбором параметров), но и выполнение кода на языке lsFusion (по аналогии с обращением к SQL серверам). Также платформа, на уровне языка, поддерживает обращение к любым внешним системам по протоколу HTTP, а также к SQL-серверам, другим lsFusion системам и т.д. Кроме того сам сервер реализован в виде Spring bean, что позволяет управлять его циклом жизни при помощи обычного Spring IoC контейнера. Все вышеперечисленное позволяет использовать lsFusion не только в качестве полноценной платформы разработки, но и, при необходимости, в качестве СУБД или даже в качестве Java-библиотеки.
icon

CI в ACID из коробки

В платформе реализован корректный откат состояния сервера приложения на момент начала транзакции из любой операции, где идет обращение к данным. Это позволяет использовать родные средства обеспечения целостности реализованные в современных SQL-серверах, что, с одной стороны, значительно уменьшает трудозатраты / вероятность ошибок при разработке системы, работающей в высококонкурентной среде, а, с другой стороны, значительно увеличивает масштабируемость такой системы (при условии использования версионных СУБД).
icon

Бесшовное подключение Java-библиотек / SQL-функций

Сервер приложений выполняется в виртуальной Java машине (JVM), что позволяет подключить к нему любую из многочисленных существующих Java-библиотек. Для этого достаточно создать свое действие на Java, зарегистрировать его в платформе и использовать, как если бы оно было встроенным или реализованным на языке платформы. Аналогичным образом можно бесшовно подключать пользовательские SQL-функции используемого сервера БД.
icon

Everything as Code

Все элементы системы, от событий до дизайна форм, задаются в виде кода на языке lsFusion, хранящегося в обычных текстовых файлах (без каких-либо общих репозитариев с неизвестной структурой). Это позволяет использовать при работе с проектами популярные системы контроля версий (Git, Subversion) и сборки проектов (Maven, встроенные в IDE). Кроме того, такой подход упрощает процесс поддержки / развертывания разработанной системы, так как позволяет, во-первых, при помощи обычного текстового редактора просматривать, и, при необходимости, оперативно изменять логику, а, во-вторых, легко идентифицировать любой элемент в системе, по его файлу и номеру строки в этом файле.
icon

Эргономичный язык

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

Эргономичная IDE

IDE на базе Intellij IDEA с полным арсеналом разработчика - поиск использований, подсветка кода / ошибок, умное автодополнение, переход к объявлению, структура класса, переименование элементов, дерево использований, брейкпоинты изменения данных, отладчик и множество других возможностей.
icon

Метапрограммирование

Хотите создать свой высокоуровневый оператор или просто не знаете как обобщить логику, но хотите использовать ее повторно? В платформе реализована полная поддержка автоматической генерации кода, причем как со стороны сервера, так и со стороны IDE.
icon

Трехзвенная архитектура

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

Кластеризация

Сервера приложений не имеют никаких разделяемых данных, поэтому их количество при необходимости можно легко наращивать. Кроме того, платформа умеет асинхронно переносить пользовательские данные с одного сервера БД на другой, что, в свою очередь, позволяет динамически распределять нагрузку между серверами БД (к примеру, если данные записываются в базу и нужен ACID, выполняя обработку на мастерах, а в остальных случаях - на наименее нагруженных слейвах).
icon

Расширения

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

Асинхронность

Платформа пытается по возможности выполнять все операции асинхронно (то есть возвращать управление пользователю не дожидаясь завершения операции). К примеру, к таким операциям относится большинство операций ввода и обработок локальных событий.
icon

Полиморфизм и агрегации

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

WYSIWYG

В абсолютном большинстве случаев пользователь из коробки получает возможность редактировать любые данные, которые он видит, делать это сразу для всех видимых объектов (групповая корректировка), выполнять copy-paste (в том числе, к примеру, из Excel), объединять / отменять / сохранять сделанные изменения и другие WYSIWYG возможности.
icon

Интернационализация

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

Изменения задним числом

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

Развитые средства администрирования

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

Продвинутые интерактивные интерфейсы

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

Политика безопасности

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

Открытые исходники

Открытые исходники платформы и IDE позволяют разработчику самостоятельно изучать поведение платформы изнутри, создавать pull request'ы, свои сборки, а также лицензировать разрабатываемые решения для использования в случае жестких требований к безопасности.
icon

Настройка системы пользователем

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

Свободная лицензия

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