Какие (типы) классов создаются в Magento 2?
В Magento 2 есть набор классов, которые генерируются автоматически и хранятся в var/generation
, и они используются в основном коде.
При попытке создать пользовательский модуль путем репликации одного из основных модулей я увидел, что также для моего модуля есть несколько сгенерированных классов.
В сгенерированных классах я видел прокси, перехватчики, фабрики....
Существует ли полный список классов или типов классов, которые генерируются автоматически?
И как сторона вопрос...когда/где они генерируются?
3 answers
Существуют разные причины для создания разных сущностей:
Прокси - используется для отложенной загрузки. Но для каждого типа требуется отдельный прокси-класс, поэтому разработчикам было бы неприятно писать их вручную, чтобы Magento их генерировал. Вы найдете ссылки только на прокси-серверы в di.xml
Фабрика - это класс, который используется для создания неинъекционных объектов (сущностей). То же самое, что и прокси. В PHP еще нет дженериков, поэтому мы автоматически генерируем фабрики, чтобы не создавать разработчик пишет шаблонный код. Вы будете взаимодействовать с фабриками по всему коду Magento. Скорее всего, вам потребуются собственные фабрики для ваших предприятий. Просто запросите соответствующую фабрику в конструкторе, и она будет сгенерирована при следующем запуске или во время запуска компилятора.
Перехватчик - это класс инфраструктуры, используемый компонентом перехвата. Как заметили Флайингмана и Фил Винкл, вам все равно не следует с ними взаимодействовать.
Существует множество других созданные объекты (например, регистратор для режима профилирования графа объектов), но эти 3 наиболее важны.
Magento 2 также может быть скомпилирован. Компиляция ускоряет DI и перехват. Вся генерация и компиляция кода может быть выполнена с помощью dev/tools/Magento/Tools/Di/compiler.php
Из Концепции:
Вам не нужно знать, какой тип классов генерируется автоматически, так как вам никогда не придется прикасаться к ним или использовать их, даже вам не следует.
Они получают (все еще?) генерируется на лету, но позже должен быть сгенерирован с помощью команды cli или аналогичной.
Список существующих типов может вырасти в любое время, когда внутренним частям потребуется новый. Но доступ к ним всегда будет скрыт за обычными документированными API (обычно известными как функции звонки)
Вот как Magento генерирует аспектно-ориентированный подход к новой платформе; фактически генерируя "события" до, вокруг и после вместо их динамической отправки. Это обеспечивает баланс удобства для программиста и производительности платформы.
Некоторые методы, такие как внедрение автоматической зависимости, сглаживаются в сгенерированные классы, а не выполняются с помощью отражения - опять же - это метод повышения производительности.