Перейти к основному содержанию
`Ctrl`+`K`

# Обзор

Global3-FrameWork является мощным и удобным инструментом разработки кроссплатформенных решений.

## Архитектура системы

### Тонкий клиент

Тонкий клиент подключается к серверу приложений в терминальном режиме, что позволяет работать на компьютерах и планшетах через канал с низкой пропускной способностью. Это возможно, так как в терминальном режиме пользователь получает только минимально необходимый для работы набор данных.
Например, если пользователь открыл список содержащий 10 000 записей, к нему на экран будет отправлена только видимая часть и кэш (примерно 100-200 записей, зависит от размеров экрана).

Тонкий клиент может работать как веб приложение в любом браузере, поддерживающим стандарт `html 5.0`, или поставляться в виде отдельного приложения на базе chromium.

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

### Мобильный клиент

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

### Балансировщик нагрузки

Балансировщик нагрузки распределяет пользователей между серверами приложений в кластере.

### Кластер серверов приложений

Нагрузка горизонтально масштабируется между серверами приложений.

Сервера приложений объединяются в кластер для возможности централизованного управления и мониторинга.

### Решение

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

### Кластер баз данных

Кластеризация базы данных поддерживается штатными средствами `postgreSQL`. В случае синхронной репликации горячей копии, возможно перенаправление на нее запросов на чтение.

## Уровни разработки

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

- Интерактивная бизнес логика - Отвечает за ввод/вывод информации и обработку действий пользователя.

- Автономная бизнес логика - Осуществляет основную обработку данных.

- Хранение данных - Реализован СУБД.

Фреймворк предоставляет удобные инструменты для взаимодействие между уровнями.

## Принципиальная схема

где:

- Графическое представление
  Вид интерфейса определяется посредством декларации пользовательского интерфейса. Реакция на пользовательские действия программируется на уровне интерактивной бизнес логики.

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

- Метаданные
  Объекты автономной и интерактивной бизнес логики регистрируются в базе данных, в слое мета данных, что позволяет выполнять администрирование и кэширование элементов бизнес логики при необходимости

- Система администрирования
  Определяет права доступа пользователя к интерактивной и автономной бизнес логике

- Система развертывания
  Отвечает за создание и обновление схемы базы данных

## Основные понятия

### Класс

Определяет правила хранения и обработки таблицы базы данных.

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

- Интеграцию с `Orm`

  - Pojo объект для хранения данных в кэше

  - Aro объект интеграции pojo в фреймворк

- Каркас автономной логики(`Api`) - `scala` класс с постфиксом `Api`

- Каркас интерактивной логики(`Avi`) - `scala` класс с постфиксом `Avi`

- Каркас декларации пользовательского интерфейса(`Avm`) - `xml` файл с расширением `avm.xml`

- Прикладные сервисы

Подробнее смотри:

- Классы

- Сервисы класса

- Тип объекта

### Бизнес объект

Бизнес-объект (БО) - объединение нескольких классов и их коллекций в группу для более удобного манипулирования ими при работе с кэшем и конфигурировании вспомогательных сервисов.

Бизнес объект позволяет:

- Массово загружать данные в транзакционный кэш
  Для бизнес объекта можно указать стратегию загрузки данных существенно уменьшающую количество запросов в базу данных. Так как запросы пойдут не по каждому объекту а по каждому классу бизнес объекта.

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

- Управлять электронной подписью
  Можно настроить правила подписи всего бизнес объекта включая не только шапку но и все вложенные коллекции.

- Настраивать интеграцию и репликацию

### Пакет

Позволяют сгруппировать общую бизнес логику в контексте сессии приложения. Пакет является `scala` классом с постфиксом `Pkg`.

### Выборка

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

Выборка определяет:

- способ получения данных

- способ отображения данных пользователю

- обработки пользовательских действий

Подробнее смотри:

- Выборка

### Модуль

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

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

### Приложение

Приложение является коренной выборкой рабочего сеанса пользователя и задает:

- Главное меню
  Содержит перечень форм, отчетов и операций

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

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

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

### Сессия приложения

Сессия приложения создается на поток прикладной бизнес логики. Сессия приложения предоставляет доступ к сессии базы данных, EclipseLink кэшу, серверу приложения. А так же содержит необходимые инъекции зависимости для работы прикладной бизнес логики.

Сессия приложения создается:

- на каждую mdi форму открытую в приложении

- на rest запрос к серверу приложения

  Примечание

  Для ускорение rest запросов возможна настройка пула сессий

Подробнее смотри:

- Сессия приложения

## Взаимодействие с данными

где:

- Объектный запрос
  Запрос данных через `JQPL`, данные запрошенные на данном языке попадают в транзакционный кэш, что позволяет их редактировать.

  Применяется к примеру в карточке документа.

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

  Применяется к примеру в списках.

- Транзакционный кэш
  Перечень запрошенных объектов в текущей сессии.

- Orm кэш
  Кэш разделяемых объектов. На классе можно включить режим кэширования в разделяемом кэше.

  Применяется на классах типизации, для снижения нагрузки на базу.

- Файловый кэш
  Повторяемые вычисления можно кэшировать в файловом кэше.

### Объектное взаимодействие

Объектное взаимодействие реализовано на основе библиотеки EclipseLink, которая отвечает за низкоуровневое взаимодействие между сервером приложений и базой данный через механизмы Orm.

Объектное взаимодействие позволяет повысить быстродействие системы за счет:

- Кэширования данных

- Применения ленивых коллекций

- Пакетных (Bulk) запросов, которые обеспечивают:

  - Сбор данных по бизнес-объекту

  - Обновление\вставку\удаление

За счет работы с объектами через объектный кэш возможно реализация прикладных сервисов, таких как аудит.

### Реляционные запросы

При необходимости возможно взаимодействие с базой данных на прямую посредством язык `sql`.