-
Notifications
You must be signed in to change notification settings - Fork 9
манипуляция провайдерами настроек через совет другого мастера #139
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from 2 commits
0e4ffc5
352b643
e94bb20
98d4477
3a0aa4a
e125a22
724f9b1
ef7ad65
02706f5
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -4,66 +4,70 @@ title: СоветДругогоМастера | |
|
|
||
| # СоветДругогоМастера | ||
|
|
||
| ## ПриСозданииОбъекта | ||
| Объект-носитель пользовательских настроек, передаваемый в [`Поделка`](../../../api/050-Классы/) при её создании. | ||
|
|
||
| С версии 4.4 рекомендуется использовать [`СтроительМенеджераПараметров`](25-СтроительМенеджераПараметров.md), доступный через метод `СтроительМенеджераПараметров()`. Старые методы (`ЗначенияДеталек`, `ПрефиксПеременныхСреды`, `ИмяФайлаСоЗначениямиДеталек`, `ДополнительныйКаталогПоискаФайлаСоЗначениямиДеталек`) объявлены **устаревшими**: при их вызове в лог пишется предупреждение, под капотом они модифицируют тот же строитель. | ||
|
|
||
| ## СтроительМенеджераПараметров | ||
|
|
||
| ```bsl | ||
| // Советы по созданию поделки, упакованные в объект. | ||
| // Возвращает (создавая лениво) строитель менеджера параметров, | ||
| // которым можно сконфигурировать состав провайдеров до передачи в Поделку. | ||
| // | ||
| Процедура ПриСозданииОбъекта() | ||
| // Возвращаемое значение: | ||
| // СтроительМенеджераПараметров | ||
| // | ||
| Функция СтроительМенеджераПараметров() Экспорт | ||
| ``` | ||
|
|
||
| ## ЗначенияДеталек | ||
| ## ПолучитьСтроительМенеджераПараметров | ||
|
|
||
| ```bsl | ||
| // Установить/получить значения деталек. | ||
| // | ||
| // Параметры: | ||
| // НовоеЗначение - Соответствие - устанавливаемые значения деталек. | ||
| // Возвращает строитель с применёнными значениями устаревших полей. | ||
| // Используется Поделкой при инициализации МенеджерПараметров. | ||
| // | ||
| // Возвращаемое значение: | ||
| // Соответствие, СоветДругогоМастера - Текущее установленное значение для гетера, ЭтотОбъект для сеттера. | ||
| // СтроительМенеджераПараметров - готовый к использованию строитель | ||
| // | ||
| Функция ЗначенияДеталек(НовоеЗначение = Неопределено) Экспорт | ||
| Функция ПолучитьСтроительМенеджераПараметров() Экспорт | ||
| ``` | ||
|
|
||
| ## ПрефиксПеременныхСреды | ||
| ## ПриСозданииОбъекта | ||
|
|
||
| ```bsl | ||
| // Установить/получить префикс переменных среды, хранящих значения деталек. | ||
| // | ||
| // Параметры: | ||
| // НовоеЗначение - Строка - устанавливаемый префикс переменных среды. | ||
| // | ||
| // Возвращаемое значение: | ||
| // Строка, СоветДругогоМастера - Текущее установленное значение для гетера, ЭтотОбъект для сеттера. | ||
| // Советы по созданию поделки, упакованные в объект. | ||
| // | ||
| Процедура ПриСозданииОбъекта() | ||
| ``` | ||
|
|
||
| ## ЗначенияДеталек <Badge type="warning" text="устарело" /> | ||
|
|
||
| Используйте `СтроительМенеджераПараметров().ДобавитьПровайдерСоответствие(...)` (с предварительным `УдалитьПровайдер("inline")` при замене дефолтного inline-провайдера). | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Мне кажется это болезненный паттерн, ну типа со схемой запроса в 1С. которая при создании уже имеет пустой оператор по нулевому индексу и вместо того чтобы начать работать с классом по человечески нужно либо удалять этот добавленный дефолт либо его самого мутировать, каждый раз спина горит. |
||
|
|
||
| ```bsl | ||
| Функция ЗначенияДеталек(НовоеЗначение = Неопределено) Экспорт | ||
| ``` | ||
|
|
||
| ## ПрефиксПеременныхСреды <Badge type="warning" text="устарело" /> | ||
|
|
||
| Используйте `СтроительМенеджераПараметров().Провайдер("env").Настройки().УстановитьПрефикс(...)`. | ||
|
|
||
| ```bsl | ||
| Функция ПрефиксПеременныхСреды(НовоеЗначение = Неопределено) Экспорт | ||
| ``` | ||
|
|
||
| ## ИмяФайлаСоЗначениямиДеталек | ||
| ## ИмяФайлаСоЗначениямиДеталек <Badge type="warning" text="устарело" /> | ||
|
|
||
| Используйте `СтроительМенеджераПараметров().ПровайдерФайлов("default").УстановитьИмяФайла(...)`. | ||
|
|
||
| ```bsl | ||
| // Установить/получить имя файла (без расширения), в котором хранятся значения деталек. | ||
| // | ||
| // Параметры: | ||
| // НовоеЗначение - Строка - устанавливаемое имя файла. | ||
| // | ||
| // Возвращаемое значение: | ||
| // Строка, СоветДругогоМастера - Текущее установленное значение для гетера, ЭтотОбъект для сеттера. | ||
| // | ||
| Функция ИмяФайлаСоЗначениямиДеталек(НовоеЗначение = Неопределено) Экспорт | ||
| ``` | ||
|
|
||
| ## ДополнительныйКаталогПоискаФайлаСоЗначениямиДеталек | ||
| ## ДополнительныйКаталогПоискаФайлаСоЗначениямиДеталек <Badge type="warning" text="устарело" /> | ||
|
|
||
| Используйте `СтроительМенеджераПараметров().ПровайдерФайлов("default").УстановитьСтандартныеКаталогиПоиска(...)`. | ||
|
|
||
| ```bsl | ||
| // Установить/получить относительный путь к каталогу, где хранятся файл со значениями деталек. | ||
| // | ||
| // Параметры: | ||
| // НовоеЗначение - Строка - устанавливаемый путь к каталогу. | ||
| // | ||
| // Возвращаемое значение: | ||
| // Строка, СоветДругогоМастера - Текущее установленное значение для гетера, ЭтотОбъект для сеттера. | ||
| // | ||
| Функция ДополнительныйКаталогПоискаФайлаСоЗначениямиДеталек(НовоеЗначение = Неопределено) Экспорт | ||
| ``` | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,236 @@ | ||
| --- | ||
| title: СтроительМенеджераПараметров | ||
| --- | ||
|
|
||
| # СтроительМенеджераПараметров | ||
|
|
||
| Инкапсулирует создание и настройку `МенеджерПараметров` (`configor`) с заранее заданным дефолтным составом провайдеров. | ||
|
|
||
| Создаётся лениво при первом обращении к [`СоветДругогоМастера.СтроительМенеджераПараметров()`](20-СоветДругогоМастера.md#СтроительМенеджераПараметров). Все настройки выполняются **до** передачи `СоветДругогоМастера` в [`Поделка`](../../../api/050-Классы/). | ||
|
coderabbitai[bot] marked this conversation as resolved.
Outdated
|
||
|
|
||
| ## Дефолтный состав провайдеров | ||
|
|
||
| | Идентификатор | Тип | Приоритет | | ||
| | --- | --- | --- | | ||
| | `env` | `ПровайдерПараметровENV` | 1 | | ||
| | `default` | Файловый метапровайдер (`yaml` + `json` + `ini`)<br>имя файла `autumn-properties`, поиск с подкаталогом `src` | 2 | | ||
| | `inline` | `ПровайдерПараметровСоответствие` | 3 | | ||
|
|
||
| Файловый метапровайдер регистрирует три физических провайдера в менеджере под идентификаторами `<база>-yaml`, `<база>-json`, `<база>-ini` с одинаковым приоритетом. Настройки, заданные через метапровайдер (имя файла, каталоги поиска и т.п.), транслируются во все три физических провайдера. | ||
|
|
||
| ## Канонический нейминг | ||
|
|
||
| Методы добавления провайдеров следуют единой схеме `ДобавитьПровайдер<Тип>`: | ||
|
|
||
| | Метод | Назначение | | ||
| | --- | --- | | ||
| | `ДобавитьПровайдер` | универсальный — для произвольного класса-провайдера | | ||
| | `ДобавитьПровайдерСоответствие` | inline-значения через `Соответствие` | | ||
| | `ДобавитьПровайдерENV` | переменные среды | | ||
| | `ДобавитьПровайдерФайлов` | мета-обёртка над несколькими форматами (`yaml`/`json`/`ini`) | | ||
| | `ДобавитьПровайдерФайлНастроек` | один файл с автоопределением формата по расширению | | ||
|
|
||
| ## Пример | ||
|
|
||
| ```bsl | ||
| Совет = Новый СоветДругогоМастера(); | ||
| Строитель = Совет.СтроительМенеджераПараметров(); | ||
|
|
||
| // Заменить дефолтный inline-провайдер своим набором значений | ||
| Значения = Новый Соответствие(); | ||
| Значения.Вставить("моя.настройка", "значение"); | ||
| Строитель.УдалитьПровайдер("inline"); | ||
| Строитель.ДобавитьПровайдерСоответствие(Значения, 3, "inline"); | ||
|
|
||
| // Добавить ещё один файловый метапровайдер | ||
| ДопФайлы = Строитель.ДобавитьПровайдерФайлов("dev", 1); | ||
| ДопФайлы.УстановитьИмяФайла("autumn-properties.dev"); | ||
|
|
||
| // Подключить конкретный файл (формат — по расширению) | ||
| Строитель.ДобавитьПровайдерФайлНастроек("./config/local.yaml", 0, "local"); | ||
|
|
||
| // Полностью пересобрать состав с нуля | ||
| Строитель.ОчиститьПровайдеры(); | ||
| Строитель.ДобавитьПровайдерENV("MYAPP_", 1, "env"); | ||
| Строитель.ДобавитьПровайдерСоответствие(Значения, 2, "inline"); | ||
|
|
||
| Поделка = Новый Поделка(Совет); | ||
| ``` | ||
|
|
||
| ## МенеджерПараметров | ||
|
|
||
| ```bsl | ||
| // Возвращает внутренний МенеджерПараметров configor. | ||
| // | ||
| // Возвращаемое значение: | ||
| // МенеджерПараметров | ||
| // | ||
| Функция МенеджерПараметров() Экспорт | ||
| ``` | ||
|
|
||
| ## ДобавитьПровайдер | ||
|
|
||
| ```bsl | ||
| // Регистрирует произвольный класс-провайдер в менеджере. | ||
| // | ||
| // Параметры: | ||
| // КлассПровайдера - Объект - класс, реализующий интерфейс провайдера configor | ||
| // Приоритет - Число - приоритет | ||
| // Идентификатор - Строка - явный идентификатор; при коллизии configor добавит #2, #3, ... | ||
| // | ||
| // Возвращаемое значение: | ||
| // Объект - переданный КлассПровайдера | ||
| // | ||
| Функция ДобавитьПровайдер(Знач КлассПровайдера, Знач Приоритет = Неопределено, Знач Идентификатор = Неопределено) Экспорт | ||
| ``` | ||
|
|
||
| ## ДобавитьПровайдерСоответствие | ||
|
|
||
| ```bsl | ||
| // Регистрирует ПровайдерПараметровСоответствие с заданными значениями. | ||
| // | ||
| // Параметры: | ||
| // Значения - Соответствие - значения параметров (по умолчанию пустое) | ||
| // Приоритет - Число | ||
| // Идентификатор - Строка | ||
| // | ||
| // Возвращаемое значение: | ||
| // ПровайдерПараметровСоответствие | ||
| // | ||
| Функция ДобавитьПровайдерСоответствие(Знач Значения = Неопределено, Знач Приоритет = Неопределено, Знач Идентификатор = Неопределено) Экспорт | ||
| ``` | ||
|
|
||
| ## ДобавитьПровайдерENV | ||
|
|
||
| ```bsl | ||
| // Регистрирует ПровайдерПараметровENV. | ||
| // | ||
| // Параметры: | ||
| // Префикс - Строка - префикс переменных среды | ||
| // Приоритет - Число | ||
| // Идентификатор - Строка | ||
| // | ||
| // Возвращаемое значение: | ||
| // ПровайдерПараметровENV | ||
| // | ||
| Функция ДобавитьПровайдерENV(Знач Префикс = "", Знач Приоритет = Неопределено, Знач Идентификатор = Неопределено) Экспорт | ||
| ``` | ||
|
|
||
| ## ДобавитьПровайдерФайлов | ||
|
|
||
| ```bsl | ||
| // Регистрирует файловый метапровайдер — обёртку над несколькими физическими | ||
| // файловыми провайдерами (yaml/json/ini) с одинаковым приоритетом. | ||
| // | ||
| // Параметры: | ||
| // Идентификатор - Строка - базовый идентификатор метапровайдера | ||
| // Приоритет - Число | ||
| // Форматы - Строка - список форматов через пробел (по умолчанию "yaml json ini") | ||
| // | ||
| // Возвращаемое значение: | ||
| // ФайловыйМетапровайдер | ||
| // | ||
| Функция ДобавитьПровайдерФайлов(Знач Идентификатор, Знач Приоритет, Знач Форматы = "yaml json ini") Экспорт | ||
| ``` | ||
|
|
||
| ## ДобавитьПровайдерФайлНастроек | ||
|
|
||
| ```bsl | ||
| // Регистрирует один файловый провайдер по конкретному пути к файлу. | ||
| // Формат определяется по расширению (.yaml/.yml — yaml, .json — json, .ini — ini). | ||
| // | ||
| // Параметры: | ||
| // ПутьКФайлу - Строка - полный или относительный путь к файлу настроек | ||
| // Приоритет - Число | ||
| // Идентификатор - Строка | ||
| // | ||
| // Возвращаемое значение: | ||
| // Объект - класс-провайдер (ПровайдерПараметровYAML/JSON/INI) | ||
| // | ||
| Функция ДобавитьПровайдерФайлНастроек(Знач ПутьКФайлу, Знач Приоритет = Неопределено, Знач Идентификатор = Неопределено) Экспорт | ||
| ``` | ||
|
|
||
| ## УдалитьПровайдер | ||
|
|
||
| ```bsl | ||
| // Удаляет (отключает) провайдер по идентификатору. | ||
| // | ||
| // Если идентификатор соответствует файловому метапровайдеру — | ||
| // отключает все его физические провайдеры и удаляет метапровайдер из реестра. | ||
| // | ||
| // Параметры: | ||
| // Идентификатор - Строка | ||
| // | ||
| Процедура УдалитьПровайдер(Знач Идентификатор) Экспорт | ||
| ``` | ||
|
|
||
| ## ОчиститьПровайдеры | ||
|
|
||
| ```bsl | ||
| // Полностью очищает состав провайдеров: пересоздаёт МенеджерПараметров | ||
| // и сбрасывает реестр файловых метапровайдеров. | ||
| // | ||
| // Полезно когда нужно собрать собственную композицию с нуля, | ||
| // не наследуя дефолтный состав (env / default / inline). | ||
| // | ||
| Процедура ОчиститьПровайдеры() Экспорт | ||
| ``` | ||
|
|
||
| ## Провайдер | ||
|
|
||
| ```bsl | ||
| // Возвращает обёртку ПровайдерПараметров (configor) по идентификатору. | ||
| // | ||
| // Параметры: | ||
| // Идентификатор - Строка | ||
| // | ||
| // Возвращаемое значение: | ||
| // ПровайдерПараметров (обёртка configor) или Неопределено | ||
| // | ||
| Функция Провайдер(Знач Идентификатор) Экспорт | ||
| ``` | ||
|
|
||
| ## ПровайдерФайлов | ||
|
|
||
| ```bsl | ||
| // Возвращает зарегистрированный файловый метапровайдер. | ||
| // | ||
| // Параметры: | ||
| // Идентификатор - Строка | ||
| // | ||
| // Возвращаемое значение: | ||
| // ФайловыйМетапровайдер | ||
| // | ||
| Функция ПровайдерФайлов(Знач Идентификатор) Экспорт | ||
| ``` | ||
|
|
||
| ## НастройкаПоискаФайла | ||
|
|
||
| ```bsl | ||
| // Возвращает глобальный объект настроек поиска файлов МенеджерПараметров | ||
| // (общий fallback для всех файловых провайдеров). | ||
| // | ||
| // Возвращаемое значение: | ||
| // НастройкиФайловогоПровайдера | ||
| // | ||
| Функция НастройкаПоискаФайла() Экспорт | ||
| ``` | ||
|
|
||
| ## Файловый метапровайдер | ||
|
|
||
| Возвращается методами `ДобавитьПровайдерФайлов` / `ПровайдерФайлов`. Проксирует настройки сразу в физические провайдеры (`<база>-yaml`, `<база>-json`, `<база>-ini`). | ||
|
|
||
| Доступные методы: | ||
|
|
||
| - `Идентификатор()` — базовый идентификатор | ||
| - `ИдентификаторыФизическихПровайдеров()` — фиксированный массив идентификаторов | ||
| - `Форматы()` — фиксированный массив форматов | ||
| - `Настройки(Формат)` — `НастройкиФайловогоПровайдера` конкретного физического провайдера | ||
| - `УстановитьПриоритет(Приоритет)` | ||
| - `УстановитьИмяФайла(Имя)` | ||
| - `УстановитьФайлПараметров(Путь)` | ||
| - `УстановитьСтандартныеКаталогиПоиска(ВложенныйКаталог = "")` | ||
| - `ДобавитьКаталогПоиска(Каталог)` | ||
| - `ОчиститьПутиПоиска()` | ||
| - `УстановитьВложенныйКаталогПоиска(ВложенныйКаталог)` | ||
| - `Отключить()` / `Включить()` | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Мне кажется нейминг методов нужно получше подобрать, потому что для меня:
СтроительМенеджераПараметровиПолучитьСтроительМенеджераПараметровэто буквально одно и то же, и ожидать от обоих методов я буду тоже самое поведение, ну и выяснив что их вообще 2 я в ступор впаду