zeegin / OpenSubsystemsLibrary

Open Subsystems Library provide what you don't want to do — no more, no less.
MIT License
77 stars 13 forks source link

WIP: Background worker #14

Closed zeegin closed 4 years ago

zeegin commented 4 years ago

Background Worker #10

EDV-Lotse commented 4 years ago

Привет! В своей конфигурации 1C:Business Suite столкнулся с ситуацией, когда она либо не запускается на других платформах кроме Windows, либо стреляется в процессе при попытке обратиться к функционалу, отсутствующему в Linux (MacOS). Для проверки окружения при вызове отдельных механизмов платформы нужны соответствующие функции, примерно такие как в общем модуле Platform. Однако мне непонятно почему в них упор сделан на платформу клиента, ведь на сервере тоже нужно знать окружение перед вызовом механизма платформы или загрузкой внешнего модуля (dll или so). Предлагаю сделать функции универсальными, т.е. без параметра они возвращают окружение контекста вызова, а с параметром (клиент или сервер) - контекста параметра. Также нужны функции для определения разрядности, т.к. например 32-разрядные dll не работают с 64-разрядной платформой (или ОС).

zeegin commented 4 years ago

Идеология подразумевается следующая:

  1. Клиент не должен знать на какой архитектуре работает сервер.
  2. Сервер должен знать на какой архитектуре работает клиент.

Потому в модуле Platform есть функция IsWindowsClient и ее аналоги, модуль клиент-серверный и определяет контекст по месту вызова всегда возвращая платформу клиента.

Кажется правильным добавить IsWindowsServer и ее аналоги в модуль Platform которые будут доступны только на сервере (ограничением директивой компиляции) и которые будут возвращать всегда платформу сервера.

Почему идеология такая?

Кроме того хорошей практикой считается не использовать в бизнес-логике вообще создание ветвлений относительно типа платформы. Правильно создавать булевы функции проверки поддерживаемости функционала, например ПоддерживаетсяЖурналSMS (SMSLogSupported) которые уже будут проверять тип платформы или другие условия внутри себя.

zeegin commented 4 years ago

Задачу откладывал очень долго и еще отложу. Не хочу делать дважды: Хочется дождаться 8.3.18 с его новым апи асинхронным и там уже проектировать апи клиентских асинхронных модулей.

zeegin commented 4 years ago

Наработки по этому бранчу мержую как есть.