Skip to content

НапильникХранилищеСущностей

Пост-процессор (напильник) для автоматической генерации реализации методов запросов в классах хранилищ сущностей. Отвечает за анализ аннотаций и создание декораторов с соответствующими перехватчиками методов.

Назначение

НапильникХранилищеСущностей выполняет следующие функции:

  1. Обрабатывает классы с аннотацией &ХранилищеСущностей
  2. Анализирует методы с аннотацией &МетодЗапроса
  3. Генерирует реализацию методов запросов на основе их имен
  4. Создает наследников с делегированием к базовому хранилищу
  5. Интегрирует сгенерированные классы с autumn framework

Аннотации

bsl
&Напильник

Класс помечен аннотацией &Напильник, что означает его использование как процессора в рамках autumn framework для обработки других классов.

Конструктор

bsl
Процедура ПриСозданииОбъекта(
    &Пластилин Поделка,
    &Пластилин КонтейнерАннотаций,
    &Пластилин ПостроительОпцийПоиска
)

Параметры

Поделка

Тип: Поделка

Контейнер зависимостей, используемый для получения определений аннотаций и поиска желудей.

КонтейнерАннотаций

Тип: КонтейнерАннотаций

Контейнер для работы с аннотациями библиотеки annotations, предоставляемый ОСенью.

ПостроительОпцийПоиска

Тип: ПостроительОпцийПоиска

Внутренний компонент для анализа имен методов и построения объектов ОпцииПоиска.

Основной метод

ОбработатьЖелудь(Желудь, ОпределениеЖелудя)

Основной метод обработки классов, помеченных аннотацией &ХранилищеСущностей.

Параметры:

  • Желудь - исходный объект класса
  • ОпределениеЖелудя - метаданные класса с информацией о методах и аннотациях

Возвращает: Обработанный объект (декоратор) или исходный объект, если обработка не требуется

Алгоритм обработки

1. Проверка аннотации

Метод проверяет наличие аннотации &ХранилищеСущностей в конструкторе класса:

bsl
АннотацияХранилищеСущностей = РаботаСАннотациями.НайтиАннотацию(Конструктор.Аннотации, "ХранилищеСущностей");

Если АннотацияХранилищеСущностей = Неопределено Тогда
    Возврат Желудь; // Класс не требует обработки
КонецЕсли;

2. Извлечение параметров аннотации

Из аннотации извлекаются:

  • ИмяТипаСущности - тип сущности для работы
  • ИсточникДанныхСущности - источник данных (опционально)

3. Получение базового хранилища

Напильник находит соответствующее базовое хранилище сущностей в контейнере:

bsl
ХранилищеСущностей = _Поделка.НайтиЖелудь("ХранилищеСущностей" + ИсточникДанныхСущности + ИмяТипаСущности);

4. Создание построителя наследника

Используется ПостроительНаследника из библиотеки extends для создания класса-наследника:

bsl
ПостроительНаследника = Новый ПостроительНаследника(
    Желудь,
    ХранилищеСущностей,
    ОпределениеЖелудя.Методы(),
    ОпределениеЖелудя.Завязь().ДанныеМетода()
);

5. Обработка методов запросов

Для каждого метода с аннотацией &МетодЗапроса:

  1. Анализ имени метода - ПостроительОпцийПоиска разбирает имя метода и создает параметры поиска
  2. Генерация кода - создается строка с кодом для выполнения запроса
  3. Создание перехватчика - генерируется перехватчик с кодом реализации метода

6. Построение декоратора

Создается окончательный декоратор с всеми перехватчиками и возвращается вместо исходного объекта.

Пример генерации кода

Для метода:

bsl
&МетодЗапроса
Функция ПолучитьПервыеСоСмещениемПоИмяРавноИВозрастБольше(Количество, Смещение, Имя, Возраст) Экспорт
    Возврат Неопределено;
КонецФункции

Напильник сгенерирует следующий код:

bsl
ОпцииПоиска = Новый ОпцииПоиска();
ОпцииПоиска.Первые(Количество);
ОпцииПоиска.Смещение(Смещение);
ОпцииПоиска.Отбор("Имя", ВидСравнения.Равно, Имя);
ОпцииПоиска.Отбор("Возраст", ВидСравнения.Больше, Возраст);
Возврат ХранилищеСущностей.Получить(ОпцииПоиска);

Поддерживаемые конструкции

Режимы поиска

  • Получить - генерирует вызов ХранилищеСущностей.Получить(ОпцииПоиска)
  • ПолучитьОдно - генерирует вызов ХранилищеСущностей.ПолучитьОдно(ОпцииПоиска)

Ограничения

  • Первые - генерирует вызов ОпцииПоиска.Первые(Параметр)
  • СоСмещением - генерирует вызов ОпцииПоиска.Смещение(Параметр)

Условия отбора

Все виды сравнения преобразуются в соответствующие вызовы:

bsl
ОпцииПоиска.Отбор("ПутьКДанным", ВидСравнения.ВидСравнения, Параметр);

Поддерживаемые виды сравнения:

  • Равно, НеРавно, Больше, БольшеИлиРавно, Меньше, МеньшеИлиРавно, В, НеВ

Сортировка

Сортировка преобразуется в вызовы:

bsl
ОпцииПоиска.СортироватьПо("ПутьКДанным", НаправлениеСортировки.Направление);

Поддерживаемые направления:

  • НаправлениеСортировки.Возр (по умолчанию)
  • НаправлениеСортировки.Убыв

Соответствие параметров

Напильник обеспечивает правильное соответствие параметров метода и их использования в сгенерированном коде:

  1. Параметры ограничений (Первые, СоСмещением) используются в порядке их следования в имени метода
  2. Параметры условий отбора используются в том же порядке, что и условия в имени метода
  3. Индексы параметров вычисляются автоматически на основе позиции в массиве параметров метода

Внутренние зависимости

Класс использует следующие внутренние компоненты:

  • ПостроительОпцийПоиска - для анализа имен методов
  • ТокенайзерЗапросов - для разбора токенов в именах методов
  • Компоненты библиотеки extends для создания наследников
  • Компоненты autumn framework для работы с аннотациями

Обработка ошибок

Напильник выполняет валидацию:

  • Проверяет корректность параметров аннотаций
  • Валидирует структуру имен методов через ПостроительОпцийПоиска
  • Обеспечивает соответствие количества параметров метода и ожидаемых параметров

При обнаружении ошибок генерируются соответствующие исключения с описанием проблемы.

См. также