Возможность регистрировать несколько экземпляров провайдеров одного типа#49
Возможность регистрировать несколько экземпляров провайдеров одного типа#49Segate-ekb wants to merge 3 commits intooscript-library:masterfrom
Conversation
| // Если провайдер имеет собственные настройки и задан файл — используем свои настройки | ||
| // через ФайловыйПровайдерПараметров; иначе — используем входящие НастройкиПровайдера напрямую | ||
| ЭффективныеНастройки = _Настройки.ПолучитьНастройки(); | ||
| Если НастройкиПровайдера <> Неопределено | ||
| И НЕ ЗначениеЗаполнено(ЭффективныеНастройки.ПутьКФайлуПараметров) | ||
| И ЭффективныеНастройки.КаталогиПоиска.Количество() = 0 Тогда | ||
| // Fallback: настройки переданы снаружи (обратная совместимость) | ||
| ЭффективныеНастройки = НастройкиПровайдера; | ||
| КонецЕсли; |
There was a problem hiding this comment.
Кажется этот код должен идти после проверки настройки провайдера, а то мы тут прочитали настройки, но если в настройках провайдера передали путь к файлу то мы прочитанное кидаем на пол и возвращаем то что почитается по переданному файлу.
В других файловых провайдерах последовательность другая
| Если НастройкиПровайдера <> Неопределено И НастройкиПровайдера.Свойство("ФайлПараметров") Тогда | ||
| // Вызов из ФайловыйПровайдерПараметров — читаем конкретный файл | ||
| ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); | ||
|
|
||
| Если Не ФайлПараметров.Существует() Тогда | ||
| Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); | ||
| Если Не ФайлПараметров.Существует() Тогда | ||
| Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); | ||
| Возврат ПрочитанныеПараметры; | ||
| КонецЕсли; | ||
|
|
||
| Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя); | ||
| ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя); | ||
| Возврат ПрочитанныеПараметры; | ||
| КонецЕсли; |
There was a problem hiding this comment.
Кажется эти куски кода дублируются у разных файловых провайдеров, может вынести в абстрактный ФайловыйПровайдерПараметров и из него дёргать? Ну или типа того
|
|
||
| ПровайдерыПараметров.Вставить(ФинальныйИдентификатор, ДобавляемыйПровайдерПараметров); | ||
|
|
||
| Возврат КлассОбъект; |
There was a problem hiding this comment.
Кажется было бы правильно тут возвращать ДобавляемыйПровайдерПараметров чтобы тип возвращался консиcтентно с ПровайдерПоИдентификатору
| Функция Настройки() Экспорт | ||
| Возврат Неопределено; | ||
| КонецФункции |
There was a problem hiding this comment.
Видимо чтобы сохранить fluent-api логику привнесённую реквестом имеет смысл выделить настройки такого провайдера в рамках которого можно было бы задавать значения настроек например.
| @@ -3,8 +3,15 @@ | |||
| Перем Лог; | |||
| Перем Префикс; | |||
There was a problem hiding this comment.
Поле больше не используется, надо и его выпилить и установку его в конструкторе выпилить
| Перем _Приоритет; // Число | ||
| Перем _Идентификатор; // Строка | ||
|
|
||
| Процедура ПриСозданииОбъекта(Параметры = Неопределено) |
There was a problem hiding this comment.
А какая смысловая нагрузка в провайдере без параметров? Ну типа он делает буквально ничего
Что сделано
Реализована возможность регистрировать несколько экземпляров провайдеров одного типа (например, два json с разными файлами или два env с разными префиксами) и настраивать каждый из них независимо через fluent-API.
Ключевые изменения
Все встроенные провайдеры (JSON, YAML, INI, ENV, VAULT, Соответствие) получили:
внутренние поля _Приоритет, _Идентификатор, _Настройки;
метод Настройки() — возвращает собственный объект настроек экземпляра;
ДобавитьПровайдерПараметров(...) стал функцией и возвращает сам класс-провайдер (для chaining);
добавлен 3-й параметр ИдентификаторПровайдера;
при коллизии идентификатор автоматически получает суффикс #2, #3 и т.д. (ПолучитьСвободныйИдентификатор);
новый метод ПровайдерПоИдентификатору("json") — доступ к ранее зарегистрированному провайдеру.
3. Делегирование чтения
Файловые провайдеры (JSON, YAML, INI) теперь сами создают ФайловыйПровайдерПараметров при прямом вызове ПрочитатьПараметры() и используют свои настройки, а внешние принимают как fallback. ПровайдерПараметров.ПрочитатьПараметры() больше не оборачивает файловый провайдер автоматически — это делает сам провайдер.