НапильникХранилищеСущностей
Пост-процессор (напильник) для автоматической генерации реализации методов запросов в классах хранилищ сущностей. Отвечает за анализ аннотаций и создание декораторов с соответствующими перехватчиками методов.
Назначение
НапильникХранилищеСущностей
выполняет следующие функции:
- Обрабатывает классы с аннотацией
&ХранилищеСущностей
- Анализирует методы с аннотацией
&МетодЗапроса
- Генерирует реализацию методов запросов на основе их имен
- Создает наследников с делегированием к базовому хранилищу
- Интегрирует сгенерированные классы с autumn framework
Аннотации
&Напильник
Класс помечен аннотацией &Напильник
, что означает его использование как процессора в рамках autumn framework для обработки других классов.
Конструктор
Процедура ПриСозданииОбъекта(
&Пластилин Поделка,
&Пластилин КонтейнерАннотаций,
&Пластилин ПостроительОпцийПоиска
)
Параметры
Поделка
Тип: Поделка
Контейнер зависимостей, используемый для получения определений аннотаций и поиска желудей.
КонтейнерАннотаций
Тип: КонтейнерАннотаций
Контейнер для работы с аннотациями библиотеки annotations
, предоставляемый ОСенью.
ПостроительОпцийПоиска
Тип: ПостроительОпцийПоиска
Внутренний компонент для анализа имен методов и построения объектов ОпцииПоиска
.
Основной метод
ОбработатьЖелудь(Желудь, ОпределениеЖелудя)
Основной метод обработки классов, помеченных аннотацией &ХранилищеСущностей
.
Параметры:
Желудь
- исходный объект классаОпределениеЖелудя
- метаданные класса с информацией о методах и аннотациях
Возвращает: Обработанный объект (декоратор) или исходный объект, если обработка не требуется
Алгоритм обработки
1. Проверка аннотации
Метод проверяет наличие аннотации &ХранилищеСущностей
в конструкторе класса:
АннотацияХранилищеСущностей = РаботаСАннотациями.НайтиАннотацию(Конструктор.Аннотации, "ХранилищеСущностей");
Если АннотацияХранилищеСущностей = Неопределено Тогда
Возврат Желудь; // Класс не требует обработки
КонецЕсли;
2. Извлечение параметров аннотации
Из аннотации извлекаются:
ИмяТипаСущности
- тип сущности для работыИсточникДанныхСущности
- источник данных (опционально)
3. Получение базового хранилища
Напильник находит соответствующее базовое хранилище сущностей в контейнере:
ХранилищеСущностей = _Поделка.НайтиЖелудь("ХранилищеСущностей" + ИсточникДанныхСущности + ИмяТипаСущности);
4. Создание построителя наследника
Используется ПостроительНаследника
из библиотеки extends
для создания класса-наследника:
ПостроительНаследника = Новый ПостроительНаследника(
Желудь,
ХранилищеСущностей,
ОпределениеЖелудя.Методы(),
ОпределениеЖелудя.Завязь().ДанныеМетода()
);
5. Обработка методов запросов
Для каждого метода с аннотацией &МетодЗапроса
:
- Анализ имени метода -
ПостроительОпцийПоиска
разбирает имя метода и создает параметры поиска - Генерация кода - создается строка с кодом для выполнения запроса
- Создание перехватчика - генерируется перехватчик с кодом реализации метода
6. Построение декоратора
Создается окончательный декоратор с всеми перехватчиками и возвращается вместо исходного объекта.
Пример генерации кода
Для метода:
&МетодЗапроса
Функция ПолучитьПервыеСоСмещениемПоИмяРавноИВозрастБольше(Количество, Смещение, Имя, Возраст) Экспорт
Возврат Неопределено;
КонецФункции
Напильник сгенерирует следующий код:
ОпцииПоиска = Новый ОпцииПоиска();
ОпцииПоиска.Первые(Количество);
ОпцииПоиска.Смещение(Смещение);
ОпцииПоиска.Отбор("Имя", ВидСравнения.Равно, Имя);
ОпцииПоиска.Отбор("Возраст", ВидСравнения.Больше, Возраст);
Возврат ХранилищеСущностей.Получить(ОпцииПоиска);
Поддерживаемые конструкции
Режимы поиска
Получить
- генерирует вызовХранилищеСущностей.Получить(ОпцииПоиска)
ПолучитьОдно
- генерирует вызовХранилищеСущностей.ПолучитьОдно(ОпцииПоиска)
Ограничения
Первые
- генерирует вызовОпцииПоиска.Первые(Параметр)
СоСмещением
- генерирует вызовОпцииПоиска.Смещение(Параметр)
Условия отбора
Все виды сравнения преобразуются в соответствующие вызовы:
ОпцииПоиска.Отбор("ПутьКДанным", ВидСравнения.ВидСравнения, Параметр);
Поддерживаемые виды сравнения:
Равно
,НеРавно
,Больше
,БольшеИлиРавно
,Меньше
,МеньшеИлиРавно
,В
,НеВ
Сортировка
Сортировка преобразуется в вызовы:
ОпцииПоиска.СортироватьПо("ПутьКДанным", НаправлениеСортировки.Направление);
Поддерживаемые направления:
НаправлениеСортировки.Возр
(по умолчанию)НаправлениеСортировки.Убыв
Соответствие параметров
Напильник обеспечивает правильное соответствие параметров метода и их использования в сгенерированном коде:
- Параметры ограничений (
Первые
,СоСмещением
) используются в порядке их следования в имени метода - Параметры условий отбора используются в том же порядке, что и условия в имени метода
- Индексы параметров вычисляются автоматически на основе позиции в массиве параметров метода
Внутренние зависимости
Класс использует следующие внутренние компоненты:
ПостроительОпцийПоиска
- для анализа имен методовТокенайзерЗапросов
- для разбора токенов в именах методов- Компоненты библиотеки
extends
для создания наследников - Компоненты autumn framework для работы с аннотациями
Обработка ошибок
Напильник выполняет валидацию:
- Проверяет корректность параметров аннотаций
- Валидирует структуру имен методов через
ПостроительОпцийПоиска
- Обеспечивает соответствие количества параметров метода и ожидаемых параметров
При обнаружении ошибок генерируются соответствующие исключения с описанием проблемы.