Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -4,66 +4,70 @@ title: СоветДругогоМастера

# СоветДругогоМастера

## ПриСозданииОбъекта
Объект-носитель пользовательских настроек, передаваемый в [`Поделка`](../../../api/050-Классы/) при её создании.

С версии 4.4 рекомендуется использовать [`СтроительМенеджераПараметров`](25-СтроительМенеджераПараметров.md), доступный через метод `СтроительМенеджераПараметров()`. Старые методы (`ЗначенияДеталек`, `ПрефиксПеременныхСреды`, `ИмяФайлаСоЗначениямиДеталек`, `ДополнительныйКаталогПоискаФайлаСоЗначениямиДеталек`) объявлены **устаревшими**: при их вызове в лог пишется предупреждение, под капотом они модифицируют тот же строитель.

## СтроительМенеджераПараметров

```bsl
// Советы по созданию поделки, упакованные в объект.
// Возвращает (создавая лениво) строитель менеджера параметров,
// которым можно сконфигурировать состав провайдеров до передачи в Поделку.
//
Процедура ПриСозданииОбъекта()
// Возвращаемое значение:
// СтроительМенеджераПараметров
//
Функция СтроительМенеджераПараметров() Экспорт
```

## ЗначенияДеталек
## ПолучитьСтроительМенеджераПараметров

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.

Мне кажется нейминг методов нужно получше подобрать, потому что для меня:
СтроительМенеджераПараметров и ПолучитьСтроительМенеджераПараметров это буквально одно и то же, и ожидать от обоих методов я буду тоже самое поведение, ну и выяснив что их вообще 2 я в ступор впаду


```bsl
// Установить/получить значения деталек.
//
// Параметры:
// НовоеЗначение - Соответствие - устанавливаемые значения деталек.
// Возвращает строитель с применёнными значениями устаревших полей.
// Используется Поделкой при инициализации МенеджерПараметров.
//
// Возвращаемое значение:
// Соответствие, СоветДругогоМастера - Текущее установленное значение для гетера, ЭтотОбъект для сеттера.
// СтроительМенеджераПараметров - готовый к использованию строитель
//
Функция ЗначенияДеталек(НовоеЗначение = Неопределено) Экспорт
Функция ПолучитьСтроительМенеджераПараметров() Экспорт
```

## ПрефиксПеременныхСреды
## ПриСозданииОбъекта

```bsl
// Установить/получить префикс переменных среды, хранящих значения деталек.
//
// Параметры:
// НовоеЗначение - Строка - устанавливаемый префикс переменных среды.
//
// Возвращаемое значение:
// Строка, СоветДругогоМастера - Текущее установленное значение для гетера, ЭтотОбъект для сеттера.
// Советы по созданию поделки, упакованные в объект.
//
Процедура ПриСозданииОбъекта()
```

## ЗначенияДеталек <Badge type="warning" text="устарело" />

Используйте `СтроительМенеджераПараметров().ДобавитьПровайдерСоответствие(...)` (с предварительным `УдалитьПровайдер("inline")` при замене дефолтного inline-провайдера).

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.

Мне кажется это болезненный паттерн, ну типа со схемой запроса в 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-Классы/).
Comment thread
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`).

Доступные методы:

- `Идентификатор()` — базовый идентификатор
- `ИдентификаторыФизическихПровайдеров()` — фиксированный массив идентификаторов
- `Форматы()` — фиксированный массив форматов
- `Настройки(Формат)` — `НастройкиФайловогоПровайдера` конкретного физического провайдера
- `УстановитьПриоритет(Приоритет)`
- `УстановитьИмяФайла(Имя)`
- `УстановитьФайлПараметров(Путь)`
- `УстановитьСтандартныеКаталогиПоиска(ВложенныйКаталог = "")`
- `ДобавитьКаталогПоиска(Каталог)`
- `ОчиститьПутиПоиска()`
- `УстановитьВложенныйКаталогПоиска(ВложенныйКаталог)`
- `Отключить()` / `Включить()`
1 change: 1 addition & 0 deletions docs/api/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
## Классы

* [СоветДругогоМастера](Классы/СоветДругогоМастера)
* [СтроительМенеджераПараметров](Классы/СтроительМенеджераПараметров.md)
* [Завязь](Классы/Завязь.md)
* [Табакерка](Классы/Табакерка.md)
* [ОпределениеЖелудя](Классы/ОпределениеЖелудя.md)
Expand Down
Loading
Loading