Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,66 +4,120 @@ title: СоветДругогоМастера

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

Класс-конфигуратор для управления параметрами приложения в фреймворке ОСень. Позволяет настроить различные источники конфигурации: переменные среды, файлы JSON/YAML/INI, и прямые значения параметров.

## Пример использования

```bsl
// Создание и настройка советника для конфигурации приложения
Совет = Новый СоветДругогоМастера();

// Установка значений деталек напрямую
ЗначенияДеталек = Новый Соответствие();
ЗначенияДеталек.Вставить("app.name", "МоеПриложение");
ЗначенияДеталек.Вставить("app.version", "1.0.0");
ЗначенияДеталек.Вставить("database.host", "localhost");

Совет.ЗначенияДеталек(ЗначенияДеталек)
.ПрефиксПеременныхСреды("MYAPP_")
.ИмяФайлаСоЗначениямиДеталек("application")
.ДополнительныйКаталогПоискаФайлаСоЗначениямиДеталек("config");

// Использование в создании поделки
Поделка = Новый Поделка(Совет);
```

Данная конфигурация приведет к следующему поведению системы параметров:
1. Переменные среды с префиксом `MYAPP_` будут загружены в параметры
2. Файлы `application.json`, `application.yaml`, `application.yml`, `application.ini` будут искаться в стандартных каталогах и каталоге `config`
3. Значения, установленные напрямую в соответствии, будут иметь наивысший приоритет

## ПриСозданииОбъекта

```bsl
// Советы по созданию поделки, упакованные в объект.
// Создает объект с настройками по умолчанию для управления параметрами приложения.
// Инициализирует пустое соответствие значений деталек, устанавливает имя файла
// конфигурации "autumn-properties" и каталог поиска "src".
//
Процедура ПриСозданииОбъекта()
```

## ЗначенияДеталек

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

## ПрефиксПеременныхСреды

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

## ИмяФайлаСоЗначениямиДеталек

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

## ДополнительныйКаталогПоискаФайлаСоЗначениямиДеталек

```bsl
// Установить/получить относительный путь к каталогу, где хранятся файл со значениями деталек.
// Установить/получить относительный путь к каталогу, где хранятся файлы со значениями деталек.
// Этот каталог добавляется к стандартным каталогам поиска конфигурационных файлов.
//
// Параметры:
// НовоеЗначение - Строка - устанавливаемый путь к каталогу.
// НовоеЗначение - Строка - устанавливаемый относительный путь к каталогу.
//
// Возвращаемое значение:
// Строка, СоветДругогоМастера - Текущее установленное значение для гетера, ЭтотОбъект для сеттера.
//
// Пример:
// Совет = Новый СоветДругогоМастера();
// Совет.ДополнительныйКаталогПоискаФайлаСоЗначениямиДеталек("config");
// // Конфигурационные файлы будут искаться также в каталоге "./config"
//
Функция ДополнительныйКаталогПоискаФайлаСоЗначениямиДеталек(НовоеЗначение = Неопределено) Экспорт
```
36 changes: 36 additions & 0 deletions docs/product/framework-elements/060-app-settings-injection.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,39 @@ title: Внедрение настроек приложения
JSON обычно содержит вложенные объекты и массивы. Путь к настройкам в таких вложенных структурах можно указать в параметре аннотации `&Деталька` в формате библиотеки [configor](https://github.com/khorevaa/configor), используя точки для объектов и квадратные скобки для массивов.

Не обязательно заставлять пользователя указывать все настройки в конфигурационном файле, если ему могут подойти значения настроек по умолчанию. Для указания значения по умолчанию в `&Детальке` есть параметр `ЗначениеПоУмолчанию`. Поразительно, не правда ли?

## Настройка параметров приложения с помощью СоветДругогоМастера

Для более гибкой настройки системы параметров приложения можно использовать класс `СоветДругогоМастера`. Он позволяет программно управлять источниками конфигурации, включая:

- Прямую установку значений параметров
- Настройку префиксов переменных среды
- Изменение имени конфигурационного файла
- Добавление дополнительных каталогов поиска

::: code-group

```bsl [Настройка конфигурации]
// Создание и настройка советника
Совет = Новый СоветДругогоМастера();

// Установка значений напрямую
ЗначенияДеталек = Новый Соответствие();
ЗначенияДеталек.Вставить("app.name", "МоеПриложение");
ЗначенияДеталек.Вставить("app.version", "1.0.0");

Совет.ЗначенияДеталек(ЗначенияДеталек)
.ПрефиксПеременныхСреды("MYAPP_")
.ИмяФайлаСоЗначениямиДеталек("application")
.ДополнительныйКаталогПоискаФайлаСоЗначениямиДеталек("config");

// Использование в создании поделки
Поделка = Новый Поделка(Совет);
```

:::

Такая конфигурация позволит системе:
1. Искать переменные среды с префиксом `MYAPP_` (например, `MYAPP_APP_NAME`, `MYAPP_DATABASE_HOST`)
2. Загружать файлы `application.json`, `application.yaml`, `application.yml`, `application.ini` из стандартных каталогов и каталога `config`
3. Использовать прямо установленные значения с наивысшим приоритетом
45 changes: 42 additions & 3 deletions src/Классы/СоветДругогоМастера.os
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,13 @@

#Область ПрограммныйИнтерфейс

// Установить/получить значения деталек.
// Установить/получить значения деталек (параметров конфигурации).
//
// Параметры:
// НовоеЗначение - Соответствие - устанавливаемые значения деталек.
//
// Возвращаемое значение:
// Соответствие, СоветДругогоМастера - Текущее установленное значение для гетера, ЭтотОбъект для сеттера.
//
// Параметры:
// НовоеЗначение - Соответствие - устанавливаемые значения деталек.
Expand All @@ -40,7 +46,8 @@

КонецФункции

// Установить/получить префикс переменных среды, хранящих значения деталек.
// Установить/получить префикс для поиска переменных среды с параметрами.
// Система будет искать переменные среды, начинающиеся с указанного префикса.
//
// Параметры:
// НовоеЗначение - Строка - устанавливаемый префикс переменных среды.
Expand Down Expand Up @@ -101,7 +108,39 @@

#Область Инициализация

// Советы по созданию поделки, упакованные в объект.
// Пример использования:
//
// ```bsl
// // Создание и настройка советника для конфигурации приложения
// Совет = Новый СоветДругогоМастера();
//
// // Установка значений деталек напрямую
// ЗначенияДеталек = Новый Соответствие();
// ЗначенияДеталек.Вставить("app.name", "МоеПриложение");
// ЗначенияДеталек.Вставить("app.version", "1.0.0");
// ЗначенияДеталек.Вставить("database.host", "localhost");
//
// Совет.ЗначенияДеталек(ЗначенияДеталек)
// .ПрефиксПеременныхСреды("MYAPP_")
// .ИмяФайлаСоЗначениямиДеталек("application")
// .ДополнительныйКаталогПоискаФайлаСоЗначениямиДеталек("config");
//
// // Использование в создании поделки
// Поделка = Новый Поделка(Совет);
// ```
//
// Данная конфигурация приведет к следующему поведению системы параметров:
// 1. Переменные среды с префиксом `MYAPP_` будут загружены в параметры
// 2. Файлы `application.json`, `application.yaml`, `application.yml`, `application.ini` будут искаться в стандартных каталогах и каталоге `config`
// 3. Значения, установленные напрямую в соответствии, будут иметь наивысший приоритет

// Класс-конфигуратор для управления параметрами приложения в фреймворке ОСень.
// Позволяет настроить различные источники конфигурации: переменные среды,
// файлы JSON/YAML/INI, и прямые значения параметров.
//
// Создает объект с настройками по умолчанию для управления параметрами приложения.
// Инициализирует пустое соответствие значений деталек, устанавливает имя файла
// конфигурации "autumn-properties" и каталог поиска "src".
//
Процедура ПриСозданииОбъекта()

Expand Down