Які класи (тип) генеруються в Magento 2?


9

У Magento 2 є набір класів, які генеруються автоматично і зберігаються в них, var/generationі вони використовуються в основному коді.
Намагаючись створити власний модуль шляхом реплікації одного з основних модулів, я побачив, що і для мого модуля є декілька створених класів.
У створених класах я бачив проксі, перехоплювачі, фабрики….

Чи є повний перелік класів або тип класів, які створюються автоматично?
І як побічне питання ... коли / де вони породжуються?

Відповіді:


9

Існують різні причини для створення різних об'єктів:

Проксі - використовується для ледачого завантаження. Але кожен тип вимагає окремого проксі-класу, так що розробникам було б дратувати записувати їх вручну, щоб Magento генерував їх. Yo знайде посилання на Proxies лише у di.xml

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

Перехоплювач - це інфраструктурний клас, який використовується компонентом перехоплення. Як помітили Філінгмана і Філ Вінкл, ви ні в якому разі не повинні взаємодіяти з ними.

Існує безліч інших утворень (як Logger для режиму профілювання об'єктних графіків), але ці 3 є найважливішими.

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


2

З концепції:

Вам не потрібно знати, який тип класів створюється автоматично, оскільки вам ніколи не потрібно їх торкатися чи користуватися, навіть не слід.

Вони генеруються (все ще?), Які генеруються на льоту, але пізніше повинні генеруватися за допомогою команди cli або подібної.

Список видів, які існують, може зрости будь-коли, коли внутрішні частини потребують нової. Але доступ до них завжди буде приховано за звичайними документально підтвердженими API (зазвичай відомими як виклики функцій)


1
Я не впевнений у тому, "чи використовуй їх". Ось приклад: In Magento\Cms\Block\Blockу конструкторі використовується примірник \Magento\Cms\Model\BlockFactory. Такого класу ніде в коді немає. Воно зустрічається лише в Росії var/generation. Тож якщо я роблю подібний модуль, можливо, мені доведеться використовувати подібний клас.
Маріус

2

Ось так Magento генерує орієнтований на аспект підхід до нової платформи; фактично генеруючи раніше, навколо та після "подій", а не динамічно розсилаючи їх. Це дозволяє досягти балансу зручності для програміста та продуктивності для платформи.

Деякі методи, такі як введення автоматичної залежності, згладжуються в створені класи, а не виконуються за допомогою рефлексії - знову ж таки - це техніка для підвищення продуктивності.


Дякую за пояснення "чому?", Але мої основні питання були "що?" і де?".
Маріус
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.