Skip to content

Возможность регистрировать несколько экземпляров провайдеров одного типа#49

Open
Segate-ekb wants to merge 3 commits intooscript-library:masterfrom
Segate-ekb:feature/multi_json
Open

Возможность регистрировать несколько экземпляров провайдеров одного типа#49
Segate-ekb wants to merge 3 commits intooscript-library:masterfrom
Segate-ekb:feature/multi_json

Conversation

@Segate-ekb
Copy link
Copy Markdown

Что сделано
Реализована возможность регистрировать несколько экземпляров провайдеров одного типа (например, два json с разными файлами или два env с разными префиксами) и настраивать каждый из них независимо через fluent-API.

Ключевые изменения

  1. Собственные настройки у каждого провайдера
    Все встроенные провайдеры (JSON, YAML, INI, ENV, VAULT, Соответствие) получили:

внутренние поля _Приоритет, _Идентификатор, _Настройки;
метод Настройки() — возвращает собственный объект настроек экземпляра;

  1. Уникальные идентификаторы с автосуффиксом

ДобавитьПровайдерПараметров(...) стал функцией и возвращает сам класс-провайдер (для chaining);
добавлен 3-й параметр ИдентификаторПровайдера;
при коллизии идентификатор автоматически получает суффикс #2, #3 и т.д. (ПолучитьСвободныйИдентификатор);
новый метод ПровайдерПоИдентификатору("json") — доступ к ранее зарегистрированному провайдеру.
3. Делегирование чтения
Файловые провайдеры (JSON, YAML, INI) теперь сами создают ФайловыйПровайдерПараметров при прямом вызове ПрочитатьПараметры() и используют свои настройки, а внешние принимают как fallback. ПровайдерПараметров.ПрочитатьПараметры() больше не оборачивает файловый провайдер автоматически — это делает сам провайдер.

  1. Обратная совместимость - присутствует.

@coveralls
Copy link
Copy Markdown

coveralls commented May 4, 2026

Coverage Status

coverage: 83.122% (-1.0%) from 84.098% — Segate-ekb:feature/multi_json into oscript-library:master

Copy link
Copy Markdown
Member

@sfaqer sfaqer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тестов бы

Comment on lines +95 to +103
// Если провайдер имеет собственные настройки и задан файл — используем свои настройки
// через ФайловыйПровайдерПараметров; иначе — используем входящие НастройкиПровайдера напрямую
ЭффективныеНастройки = _Настройки.ПолучитьНастройки();
Если НастройкиПровайдера <> Неопределено
И НЕ ЗначениеЗаполнено(ЭффективныеНастройки.ПутьКФайлуПараметров)
И ЭффективныеНастройки.КаталогиПоиска.Количество() = 0 Тогда
// Fallback: настройки переданы снаружи (обратная совместимость)
ЭффективныеНастройки = НастройкиПровайдера;
КонецЕсли;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Comment on lines 107 to 119
Если НастройкиПровайдера <> Неопределено И НастройкиПровайдера.Свойство("ФайлПараметров") Тогда
// Вызов из ФайловыйПровайдерПараметров — читаем конкретный файл
ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров);

Если Не ФайлПараметров.Существует() Тогда
Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя);
Если Не ФайлПараметров.Существует() Тогда
Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя);
Возврат ПрочитанныеПараметры;
КонецЕсли;

Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя);
ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя);
Возврат ПрочитанныеПараметры;
КонецЕсли;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Кажется эти куски кода дублируются у разных файловых провайдеров, может вынести в абстрактный ФайловыйПровайдерПараметров и из него дёргать? Ну или типа того


ПровайдерыПараметров.Вставить(ФинальныйИдентификатор, ДобавляемыйПровайдерПараметров);

Возврат КлассОбъект;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Кажется было бы правильно тут возвращать ДобавляемыйПровайдерПараметров чтобы тип возвращался консиcтентно с ПровайдерПоИдентификатору

Comment on lines +120 to +122
Функция Настройки() Экспорт
Возврат Неопределено;
КонецФункции
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

@@ -3,8 +3,15 @@
Перем Лог;
Перем Префикс;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Поле больше не используется, надо и его выпилить и установку его в конструкторе выпилить

Перем _Приоритет; // Число
Перем _Идентификатор; // Строка

Процедура ПриСозданииОбъекта(Параметры = Неопределено)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А какая смысловая нагрузка в провайдере без параметров? Ну типа он делает буквально ничего

@Segate-ekb Segate-ekb requested a review from sfaqer May 5, 2026 22:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants