Closed zeegin closed 4 years ago
Привет! В своей конфигурации 1C:Business Suite столкнулся с ситуацией, когда она либо не запускается на других платформах кроме Windows, либо стреляется в процессе при попытке обратиться к функционалу, отсутствующему в Linux (MacOS). Для проверки окружения при вызове отдельных механизмов платформы нужны соответствующие функции, примерно такие как в общем модуле Platform. Однако мне непонятно почему в них упор сделан на платформу клиента, ведь на сервере тоже нужно знать окружение перед вызовом механизма платформы или загрузкой внешнего модуля (dll или so). Предлагаю сделать функции универсальными, т.е. без параметра они возвращают окружение контекста вызова, а с параметром (клиент или сервер) - контекста параметра. Также нужны функции для определения разрядности, т.к. например 32-разрядные dll не работают с 64-разрядной платформой (или ОС).
Идеология подразумевается следующая:
Потому в модуле Platform
есть функция IsWindowsClient
и ее аналоги, модуль клиент-серверный и определяет контекст по месту вызова всегда возвращая платформу клиента.
Кажется правильным добавить IsWindowsServer
и ее аналоги в модуль Platform
которые будут доступны только на сервере (ограничением директивой компиляции) и которые будут возвращать всегда платформу сервера.
Почему идеология такая?
Кроме того хорошей практикой считается не использовать в бизнес-логике вообще создание ветвлений относительно типа платформы. Правильно создавать булевы функции проверки поддерживаемости функционала, например ПоддерживаетсяЖурналSMS
(SMSLogSupported
) которые уже будут проверять тип платформы или другие условия внутри себя.
Задачу откладывал очень долго и еще отложу. Не хочу делать дважды: Хочется дождаться 8.3.18 с его новым апи асинхронным и там уже проектировать апи клиентских асинхронных модулей.
Наработки по этому бранчу мержую как есть.
Background Worker #10