• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Глобальные переменные в 8.2

  • Автор темы Дайнеко
  • Дата начала
Д

Дайнеко

Спустя время вынужден опять задуматься над проблемой. 8.2 возненавидела глобальные переменные (ГП). А именно общие модули их не видят. В силу чего я хранил глобальные объекты в "ПараметрыСеанса". Но возникают ситуации, что ПараметрыСеанса не универсальны. И вот, кровь износу, нужны переменная. Получается дурнота:
- Объявленные ГП в Глобальном модуле (ГМ) видят все документы, справочники
- Но их не видят Общие модули. Передавать параметрами все ГП при вызове нереально.
- Думал такое решение: ф-ии работающие с ГП описать в ГМ, но их не вызовут Общие модули.
Засада, обложили по полной. У меня полное непонимание такого ограничения.

А механизм ГП нужен. Многие объекты я хочу инициализировать при старте: OLE внешних компонент, несколько неизменяемых в сеансе ТЗ, особо часто используемые константы (для удобства и скорости).

Еще про переменные. В нормальных языках есть способ объявления переменной процедуры как статический. При каждом очередном вызове процедуры переменная "помнит" старое значение. В 8-ке такого точно нет? А то вот и приходится такую переменную объявлять глобальной.
 
U

unknown181538

Писать в параметры сеанса адрес во временном хранилище не подойдет?
 
V

vitfil

Засада, обложили по полной. У меня полное непонимание такого ограничения.
А механизм ГП нужен.
В приличном обществе за такое расстреливают :)
Шучу, конечно, но попытаюсь объяснить...
8.2 - клиент-серверная. Причем, с наличием тонкого клиента. Парадигма этой схемы сводится к тому, что сервер должен работать вне зависимости состояния клиента и просто обязан инкапсулировать собственное состояние.
Иными словами, сервер обязан отдавать данные клиенту только по запросу и не предоставлять возможностей изменения собственных данных напрямую. Клиент же, в свою очередь имеет только те данные, которые получил в результате своего запроса, и тоже обязан скрыть свое состояние от сервера. наличие же глобальной переменной, доступной из общих модулей приведет к тому, что к ней возможен доступ как сервера, так и с клиента, что может привести к определенным коллизиям. Не забывайте, что 8.2 - это фактически n+1 приложений, где n - это количество клиентских приложений.

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

Дайнеко

Писать в параметры сеанса адрес во временном хранилище не подойдет?
Вот не думал. А быстродействие временного хранилища? Сопоставимо с переменной.


vitfil сказал(а):
наличие же глобальной переменной, доступной из общих модулей приведет к тому, что к ней возможен доступ как сервера, так и с клиента, что может привести к определенным коллизиям.
Ну не могу я понять, почему как таковые ГП остались в глобальном модуле. И их область действия не ограничена справочниками и документами. А вот общим модулям - фигу.
 
V

vitfil

Ну не могу я понять, почему как таковые ГП остались в глобальном модуле.

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!