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

Дайнеко

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

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

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

unknown181538

НеГуру
28.12.2008
1 417
0
#2
Писать в параметры сеанса адрес во временном хранилище не подойдет?
 

vitfil

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

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

Дайнеко

Well-known member
19.11.2009
951
0
#4
Писать в параметры сеанса адрес во временном хранилище не подойдет?
Вот не думал. А быстродействие временного хранилища? Сопоставимо с переменной.


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

vitfil

IT-интегратор
02.04.2004
2 062
0
#6
Ну не могу я понять, почему как таковые ГП остались в глобальном модуле.
Это баг, а не фича :)
Глобальные переменные в многопоточных распределенных приложениях - зло. Для таких целей используются синглтоны в качестве хранилища каких-то общих данных в оперативном режиме.