$npx -y skills add yellow-hammer/skills-onescript --skill autumnСоздаёт и настраивает компонентные приложения на фреймворке Autumn (ОСень) для OneScript с DI и аннотациями. Использовать при работе с Autumn, Dependency Injection, «желудями», аннотациями &Желудь, &Дуб, &Верховный.
| 1 | # Autumn (ОСень) |
| 2 | |
| 3 | Фреймворк компонентных приложений для OneScript с Dependency Injection и Inversion of Control. Разрешает зависимости конструкторов автоматически: не нужно вручную создавать цепочки объектов и передавать параметры во все точки создания. |
| 4 | |
| 5 | ## Принцип работы |
| 6 | |
| 7 | Объект с конструктором, принимающим параметры (зависимости), регистрируется как компонент («желудь»). Вместо вызова `Новый Класс(зависимость1, зависимость2)` в коде используется `Осень.НайтиЖелудь("ИмяКласса")` — фреймворк сам создаёт зависимости и передаёт их в конструктор. |
| 8 | |
| 9 | ## Точка входа |
| 10 | |
| 11 | ```bsl |
| 12 | #Использовать autumn |
| 13 | #Использовать "Каталог/С/Классами/Команд" // путь к папке с классами-компонентами |
| 14 | |
| 15 | Поделка = Новый Поделка(); |
| 16 | Поделка.ЗапуститьПриложение(); |
| 17 | ``` |
| 18 | |
| 19 | Каталог с классами должен содержать классы, помеченные аннотациями Autumn (Желудь, Дуб и т.д.), чтобы они регистрировались в контексте приложения. |
| 20 | |
| 21 | ## Получение компонента |
| 22 | |
| 23 | ```bsl |
| 24 | Обновлятор1С = Осень.НайтиЖелудь("Обновлятор1С"); |
| 25 | ``` |
| 26 | |
| 27 | Идентификатор совпадает с именем класса или с параметром аннотации `&Желудь("Идентификатор")`. |
| 28 | |
| 29 | ## Ключевые аннотации |
| 30 | |
| 31 | - **&Желудь("Идентификатор")** — класс регистрируется как компонент (желудь). Без параметра используется имя класса. Параметры конструктора разрешаются как зависимости других желудей. |
| 32 | |
| 33 | - **&Верховный** — корневой компонент (например, описание приложения). Указывается вместе с &Желудь. |
| 34 | |
| 35 | - **&Дуб** — класс-фабрика: не сам является желудем, но в методе с &Завязь возвращает экземпляры других классов (желудей). |
| 36 | |
| 37 | - **&Завязь** — метод внутри &Дуб, возвращающий экземпляр класса; используется для регистрации команд/компонентов без аннотаций на целевом классе (например, миграция легаси-кода). |
| 38 | |
| 39 | Пример желудя: |
| 40 | |
| 41 | ```bsl |
| 42 | &Желудь("Обновлятор1С") |
| 43 | Процедура ПриСозданииОбъекта(ПроверяторВерсий, Настройки) |
| 44 | // ПроверяторВерсий и Настройки будут разрешены Autumn и переданы сюда |
| 45 | КонецПроцедуры |
| 46 | ``` |
| 47 | |
| 48 | Пример дуба с завязью: |
| 49 | |
| 50 | ```bsl |
| 51 | &Дуб |
| 52 | Процедура ПриСозданииОбъекта() |
| 53 | КонецПроцедуры |
| 54 | |
| 55 | &Завязь |
| 56 | &КомандаПриложения(Имя = "legacy", Описание = "Легаси команда") |
| 57 | Функция МояЛегасиКоманда() Экспорт |
| 58 | Возврат Новый МояЛегасиКоманда(); |
| 59 | КонецФункции |
| 60 | ``` |
| 61 | |
| 62 | ## Рекомендации |
| 63 | |
| 64 | - Один класс — одна ответственность; зависимости передавать через конструктор. |
| 65 | - Не создавать длинные цепочки вручную — регистрировать классы как желуди и получать их через `Осень.НайтиЖелудь()`. |
| 66 | - Настройки приложения можно вынести в `autumn-properties.json` или в отдельный желудь с интерфейсом настроек. |
| 67 | |
| 68 | ## Дополнительно |
| 69 | |
| 70 | Расширенная справка по аннотациям и конфигурации — [reference.md](reference.md). |
| 71 | |
| 72 | Документация: [autumn-library.github.io](https://autumn-library.github.io/). |