# Обзор Global3-FrameWork является мощным и удобным инструментом разработки кроссплатформенных решений. ## Архитектура системы ![](../img/three-tier.png) ### Тонкий клиент Тонкий клиент подключается к серверу приложений в терминальном режиме. Что позволяет работать на как на компьютерах так и на планшетах через канал с низкой пропускной способностью. Это возможно так как в терминальном режиме пользователь получает только минимально необходимый для работы набор данных. К примеру если пользователь открыл список содержащий 10 000 записей. К нему на эран будет отправлена только видимая часть и кэш примерно 100-200 записей (зависит от размеров экрана) Тонкий клиент может работать как веб приложение в любом браузере поддерживающим стандарт `html 5.0`. Или поставляться в виде отдельного приложения на базе chromium В браузер может быть установлено дополнительное расширение, позволяющее тонкому клиенту напрямую работать с файлами, оборудованием и крипто провайдерами. В случае наличия такого расширения, работа в браузере неотличима от работы в нативном приложении. ### Мобильный клиент Существует линейка мобильных приложений позволяющая использовать полный перечень возможностей мобильного устройства. Для реализации специализированных приложений, GlobalFramework предоставляет возможность написание web сервисов, посредством которых возможно взаимодействие с нативным мобильным приложением. А так же набор библиотек облегчающих написание мобильного приложения. ### Балансировщик нагрузки Балансировщик нагрузки распределяет пользователей между серверами приложений в кластере. ### Кластер серверов приложений Нагрузка горизонтально масштабируется между серверами приложений. Сервера приложений объединяются в кластер для возможности централизованного управления и мониторинга. ### Решение Набор скомпилированных библиотек устанавливаемых в сервер приложения. Решение предоставляет весь перечень прикладной бизнес логики необходимый для работы сервера приложения. ### Кластер баз данных Кластеризация базы данных поддерживается штатными средствами `postgreSQL`. В случае синхронной репликации горячей копии, возможно перенаправление на нее запросов на чтение. ## Уровни разработки Разделение бизнес логики по уровням позволяет существенно повысить повторное использование кода между пользовательскими интерфейсами и фоновыми сервисами(интеграция, выполнение задач по расписанию и т.д.). Система Global состоит из следующих уровней: - Интерактивная бизнес логика \ Отвечает за ввод/вывод информации и обработку действий пользователя. - Автономная бизнес логика \ Осуществляет основную обработку данных. - Хранение данных \ Реализован СУБД Фреймворк предоставляет удобные инструменты для взаимодействие между уровнями. ## Принципиальная схема ![](../img/system_architecture.png) где: - Графическое представление \ Вид интерфейса определяется по средством декларации пользовательского интерфейса. Реакция на пользовательские действия программируется на уровне интерактивной бизнес логики. - Прикладная бизнес логика \ Располагается по большей части в слои автономной бизнес логики. Прикладная бизнес логика группируется по модулям, классам и пакетам - Метаданные \ Объекты автономной и интерактивной бизнес логике регистрируются в базе данных, в слои мета данных, что позволяет выполнять администрирование и кэширования элементов бизнес логики при необходимости - Система администрирования \ Определяет права доступа пользователя к интерактивной и автономной бизнес логики - Система развертывания \ Отвечает за создание и обновление схемы базы данных ## Основные понятия ### Класс Определяет правила хранения и обработки таблицы базы данных. Класс позволяет существенно ускорить разработку бизнес логики ориентированную на работу с данными. Программисту достаточно обЪявить перечень атрибутов класса чтобы за счет кода генерации получить набор готовых сервисов: - Интеграцию с `Orm` - Pojo объект для хранения данных в кэше - Aro объект интеграции pojo в фреймворк - Каркас автономной логики(`Api`) \ `scala` класс с постфиксом `Api` - Каркас интерактивной логики(`Avi`) \ `scala` класс с постфиксом `Avi` - Каркас декларации пользовательского интерфейса(`Avm`) \ `xml` файл с расширением `avm.xml` - Прикладные сервисы Подробнее смотри: - [Классы](../030_class/060_класс.md) - [Сервисы класса](../030_class/070_сервисы_класса.md) - [Тип объекта](../030_class/075_тип_объекта.md) ### Бизнес объект Бизнес-объект (БО) - объединение нескольких классов и их коллекций в группу для более удобного манипулирования ими при работе с кэшем и конфигурировании вспомогательных сервисов. Бизнес объект позволяет: - Массово загружать данные в транзакционный кэш \ Для бизнес объекта можно указать стратегию загрузки данных существенно уменьшающую количество запросов в базу данных. Так как запросы пойдут не по каждому объекту а по каждому классу бизнес объекта. - Настраивать права доступа \ По бизнес объекту создается административный объект на котором можно массово выдать привилегии для всех классов бизнес объекта - Управлять электронной подписью \ Можно настроить правила подписи всего бизнес объекта включая не только шапку но и все вложенные коллекции. - Настраивать интеграцию и репликацию ### Пакет Позволяют сгруппировать общую бизнес логику в контексте сессии приложения. Пакет является `scala` классом с постфиксом `Pkg` ### Выборка Выборка определяет правило получения, отображение данных и обеспечивает взаимодействие с пользователем. Выборки содержат основную часть интерактивной бизнес логики. Выборка определяет: - способ получения данных - способ отображения данных пользователю - обработки пользовательских действий Подробнее смотри: - [Выборка](../040_selection/080_выборка.md) ### Модуль Неделимая часть решения. Набор модулей определяет доступную функциональность развернутую в сервере приложения. Модуль может зависеть от других модулей. В таком случаи такие зависимости так же должны быть установлены в решения для обеспечения корректной работы решения. ### Приложение Приложение является коренной выборкой рабочего сеанса пользователя и задает: - Главное меню \ Содержит перечень форм, отчетов и операций - Панель быстрого доступа \ Содержит операции быстрого доступа, а так же поля задающие контекст работы рабочего сеанса, например рабочий период Пользователь при входе в систему выбирает требуемое ему для работы приложение. Перечень приложений доступных для пользователя задается администратором системы. ### Сессия приложения Сессия приложения создается на поток прикладной бизнес логики. Сессия приложения предоставляет доступ к сессией базы данных, EclipseLink кэшу, серверу приложения. А так же содержит необходимые инъекции зависимости для работы прикладной бизнес логики. Сессия приложения создается: - на каждую mdi форму открытую в приложении - на rest запрос к серверу приложения ```{note} Для ускорение rest запросов возможна настройка пула сессий ``` Подробнее смотри: - [Сессия приложения](../020_common/050_сессия_приложения.md) ## Взаимодействие с данными ![](introduction/database.drawio.png) где: - *Объектный запрос* \ Запрос данных через `JQPL`, данные запрошенные на данном языке попадают в транзакционный кэш что позволяет их редактировать. Применяется к примеру в карточке документа. - *Реляционный запрос* \ Запрос в базу данных на языке sql, позволяет использовать аналитические функции, и сложную фильтрацию. Применяется к примеру в списках. - *Транзакционный кэш* \ Перечень запрошенных объектов в текущей сессии. - *Orm кэш* \ Кэш разделяемых объектов. На классе можно включить режим кэширование в разделяемом кэше. Применяется на классах типизации, для снижения нагрузки на базу. - *Файловый кэш* \ Повторяемые вычисления можно кэшировать в файловом кэше. ### Объектное взаимодействие Объектное взаимодействие реализовано на основе библиотеки EclipseLink которая отвечает за низкоуровневое взаимодействие между сервером приложений и базой данный через механизмы Orm. Объектное взаимодействие позволяет повысить быстродействие системы за счет: - Кэширования данных - Применения ленивых коллекций - Пакетных (Bulk) запросов, которые обеспечивают: - Сбор данных по бизнес-объекту - Обновление\вставку\удаление За счет работы с объектами через объектный кэш возможно реализация прикладных сервисов, таких как аудит. ### Реляционные запросы При необходимости возможно взаимодействие с базой данных на прямую по средством язык `sql`.