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

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

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

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

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

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
Expand All @@ -12,58 +28,34 @@ title: СоветДругогоМастера
Процедура ПриСозданииОбъекта()
```

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

Используйте `ПолучитьСтроительМенеджераПараметров().ДобавитьПровайдерСоответствие(...)`.

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

## ПрефиксПеременныхСреды
## ПрефиксПеременныхСреды <Badge type="warning" text="устарело" />

Используйте `ПолучитьСтроительМенеджераПараметров().Провайдер("env").Настройки().УстановитьПрефикс(...)`.

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

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

Используйте `ПолучитьСтроительМенеджераПараметров().ПровайдерФайлов("default").УстановитьИмяФайла(...)`.

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

## ДополнительныйКаталогПоискаФайлаСоЗначениямиДеталек
## ДополнительныйКаталогПоискаФайлаСоЗначениямиДеталек <Badge type="warning" text="устарело" />

Используйте `ПолучитьСтроительМенеджераПараметров().ПровайдерФайлов("default").УстановитьСтандартныеКаталогиПоиска(...)`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Поиск методов управления каталогами поиска
rg -n "УстановитьСтандартныеКаталогиПоиска|ДобавитьКаталог" -g "*.os" -C 3

Repository: autumn-library/autumn

Length of output: 4010


Проверьте семантическую корректность пути миграции.

Метод УстановитьСтандартныеКаталогиПоиска существует, но его название (УстановитьСтандартные — "установить/заменить стандартные") семантически отличается от названия устаревшего метода ДополнительныйКаталогПоиска (добавление дополнительного).

В codebase также имеется метод ДобавитьКаталогПоиска, который по названию лучше соответствует поведению устаревшего метода (добавление vs. установка). Убедитесь, что предлагаемая миграция на УстановитьСтандартныеКаталогиПоиска действительно эквивалентна старому поведению, или рассмотрите использование ДобавитьКаталогПоиска вместо неё.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/api/050-Классы/20-СоветДругогоМастера.md` at line 57, Документальная
строка предлагает заменить вызов ДополнительныйКаталогПоиска на
ПолучитьСтроительМенеджераПараметров().ПровайдерФайлов("default").УстановитьСтандартныеКаталогиПоиска(...),
но названия методов отличаются по семантике: УстановитьСтандартныеКаталогиПоиска
заменяет список, тогда как ДополнительныйКаталогПоиска добавлял один каталог;
проверьте поведение реализации: если нужно добавлять каталоги — заменить на
ДобавитьКаталогПоиска, иначе если требуется полностью заменить набор — оставить
УстановитьСтандартныеКаталогиПоиска и явно документировать, что поведение
отличается, обновив пример и описание в тексте.

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
Author

Choose a reason for hiding this comment

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

Добавляет каталог - да


```bsl
// Установить/получить относительный путь к каталогу, где хранятся файл со значениями деталек.
//
// Параметры:
// НовоеЗначение - Строка - устанавливаемый путь к каталогу.
//
// Возвращаемое значение:
// Строка, СоветДругогоМастера - Текущее установленное значение для гетера, ЭтотОбъект для сеттера.
//
Функция ДополнительныйКаталогПоискаФайлаСоЗначениямиДеталек(НовоеЗначение = Неопределено) Экспорт
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,236 @@
---
title: СтроительМенеджераПараметров
---

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

Инкапсулирует создание и настройку `МенеджерПараметров` (`configor`) с заранее заданным дефолтным составом провайдеров.

Создаётся лениво при первом обращении к [`СоветДругогоМастера.ПолучитьСтроительМенеджераПараметров()`](20-СоветДругогоМастера.md#получитьстроительменеджерапараметров) и кэшируется в `СоветДругогоМастера`: повторные вызовы возвращают тот же экземпляр, поэтому правки строителя, сделанные клиентским кодом, доходят до `Поделки`. Все настройки выполняются **до** передачи `СоветДругогоМастера` в [`Поделка`](../../../api/050-Классы/).

## Дефолтный состав провайдеров

| Идентификатор | Тип | Приоритет |
| --- | --- | --- |
| `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
2 changes: 1 addition & 1 deletion packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
.ВключитьФайл("README.md")
.ЗависитОт("annotations", "1.4.0")
.ЗависитОт("asserts", "1.4.0")
.ЗависитОт("configor", "0.9.1")
.ЗависитОт("configor", "0.12.0")
Comment thread
coderabbitai[bot] marked this conversation as resolved.
.ЗависитОт("logos", "1.7.1")
.ЗависитОт("fluent", "0.6.1")
.ЗависитОт("reflector", "0.7.1")
Expand Down
Loading
Loading