Есть разные причины для создания разных сущностей:
Прокси - он используется для отложенной загрузки. Но для каждого типа требуется отдельный прокси-класс, поэтому разработчикам будет неудобно писать их вручную, чтобы Magento генерировал их. Йо найдет ссылки на прокси только в di.xml
Фабрика - это класс, который используется для создания неинъекционных (сущностей). То же, что прокси. У PHP пока нет обобщений, поэтому мы автоматически генерируем фабрики, чтобы разработчик не писал шаблонный код. Вы будете взаимодействовать с фабриками по всему коду Magento. Скорее всего, вам потребуются собственные фабрики для ваших организаций. Просто спросите соответствующую фабрику в конструкторе, и она будет сгенерирована при следующем запуске или во время запуска компилятора.
Interceptor - класс инфраструктуры, используемый компонентом Interception. Как заметили Флаймана и Фил Винкль, вам все равно не следует взаимодействовать с ними.
Существует множество других сгенерированных сущностей (например, Logger для режима профилирования графа объектов), но эти 3 являются наиболее важными.
Magento 2 также может быть скомпилирован. Компиляция ускоряет DI и перехват. Все генерация и компиляция кода могут быть выполнены с помощью dev / tools / Magento / Tools / Di / compiler.php
Magento\Cms\Block\Block
в конструкторе используется экземпляр\Magento\Cms\Model\BlockFactory
. Этот класс нигде в коде. Встречается только вvar/generation
. Так что, если я делаю подобный модуль, мне, возможно, придется использовать подобный класс.Вот как Magento генерирует аспектно-ориентированный подход к новой платформе; фактически генерируя до, вокруг и после «событий» вместо их динамической отправки. Это создает баланс между удобством для программиста и производительностью платформы.
Некоторые методы, такие как автоматическое внедрение зависимостей, сглаживаются в сгенерированные классы, а не выполняются с помощью отражения - опять же - это техника для повышения производительности.
источник