Какие (типы) классов генерируются в Magento 2?

9

В Magento 2 есть набор классов, которые генерируются автоматически и хранятся в них, var/generationи они используются в основном коде.
Пытаясь создать пользовательский модуль путем репликации одного из основных модулей, я увидел, что для моего модуля есть несколько сгенерированных классов.
В сгенерированных классах я видел прокси, перехватчики, фабрики ....

Существует ли полный список классов или тип классов, которые создаются автоматически?
И в качестве дополнительного вопроса ... когда / где они генерируются?

Мариус
источник

Ответы:

9

Есть разные причины для создания разных сущностей:

Прокси - он используется для отложенной загрузки. Но для каждого типа требуется отдельный прокси-класс, поэтому разработчикам будет неудобно писать их вручную, чтобы Magento генерировал их. Йо найдет ссылки на прокси только в di.xml

Фабрика - это класс, который используется для создания неинъекционных (сущностей). То же, что прокси. У PHP пока нет обобщений, поэтому мы автоматически генерируем фабрики, чтобы разработчик не писал шаблонный код. Вы будете взаимодействовать с фабриками по всему коду Magento. Скорее всего, вам потребуются собственные фабрики для ваших организаций. Просто спросите соответствующую фабрику в конструкторе, и она будет сгенерирована при следующем запуске или во время запуска компилятора.

Interceptor - класс инфраструктуры, используемый компонентом Interception. Как заметили Флаймана и Фил Винкль, вам все равно не следует взаимодействовать с ними.

Существует множество других сгенерированных сущностей (например, Logger для режима профилирования графа объектов), но эти 3 являются наиболее важными.

Magento 2 также может быть скомпилирован. Компиляция ускоряет DI и перехват. Все генерация и компиляция кода могут быть выполнены с помощью dev / tools / Magento / Tools / Di / compiler.php

Антон Криль
источник
2

Из концепции:

Вам не нужно знать, какие типы классов генерируются автоматически, поскольку вам никогда не придется их трогать или использовать, даже вам не нужно.

Они генерируются (все еще?) На лету, но позже должны генерироваться с помощью команды cli или аналогичной.

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

Flyingmana
источник
1
Я не уверен насчет "или используй их". Вот пример: Magento\Cms\Block\Blockв конструкторе используется экземпляр \Magento\Cms\Model\BlockFactory. Этот класс нигде в коде. Встречается только в var/generation. Так что, если я делаю подобный модуль, мне, возможно, придется использовать подобный класс.
Мариус
2

Вот как Magento генерирует аспектно-ориентированный подход к новой платформе; фактически генерируя до, вокруг и после «событий» вместо их динамической отправки. Это создает баланс между удобством для программиста и производительностью платформы.

Некоторые методы, такие как автоматическое внедрение зависимостей, сглаживаются в сгенерированные классы, а не выполняются с помощью отражения - опять же - это техника для повышения производительности.

philwinkle
источник
Спасибо за объяснение "почему?", Но мои главные вопросы были "что?" и где?".
Мариус