Какие (типы) классов создаются в Magento 2?


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

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

Author: Raphael at Digital Pianism, 2014-09-16

3 answers

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

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

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

Перехватчик - это класс инфраструктуры, используемый компонентом перехвата. Как заметили Флайингмана и Фил Винкл, вам все равно не следует с ними взаимодействовать.

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

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

 9
Author: Anton Kril, 2014-09-17 20:13:57

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

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

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

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

 2
Author: Flyingmana, 2014-09-16 15:40:42

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

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

 2
Author: philwinkle, 2014-09-17 03:53:25