Jakie (rodzaje) klas są generowane w Magento 2?

9

W Magento 2 istnieje zestaw klas, które są generowane automatycznie i przechowywane w nich var/generationi są używane w kodzie podstawowym.
Podczas próby utworzenia niestandardowego modułu przez replikację jednego z podstawowych modułów zauważyłem, że również dla mojego modułu istnieje kilka wygenerowanych klas.
W generowanych klasach widziałem proxy, przechwytywacze, fabryki ....

Czy istnieje pełna lista klas lub typów klas generowanych automatycznie?
A jako pytanie poboczne ... kiedy / gdzie są generowane?

Marius
źródło

Odpowiedzi:

9

Istnieją różne powody generowania różnych podmiotów:

Proxy - służy do leniwego ładowania. Ale każdy typ wymaga osobnej klasy proxy, więc byłoby to denerwujące dla programistów, aby zapisywali je ręcznie, więc Magento je generuje. W di.xml znajdziesz tylko odniesienia do proxy

Fabryka - jest klasą używaną do tworzenia elementów innych niż zastrzyki. Taki sam jak proxy. PHP nie ma jeszcze generycznych, więc automatycznie generujemy fabryki, aby nie zmuszać dewelopera do pisania pełnego kodu. Będziesz wchodził w interakcje z fabrykami w całym kodzie Magento. Najprawdopodobniej będziesz potrzebował własnych fabryk dla swoich podmiotów. Wystarczy zapytać o odpowiednią fabrykę w konstruktorze, a zostanie wygenerowana przy następnym uruchomieniu lub podczas uruchamiania kompilatora.

Przechwytywacz - jest klasą infrastruktury używaną przez komponent Przechwytywania. Jak zauważyli Flyingmana i Phil Winkle, nie powinieneś się z nimi kontaktować.

Istnieje wiele innych encji (takich jak Logger dla trybu profilowania wykresów obiektowych), ale te 3 są najważniejsze.

Magento 2 można również skompilować. Kompilacja przyspiesza DI i przechwytywanie. Wszystkie generowanie i kompilowanie kodu można wykonać za pomocą dev / tools / Magento / Tools / Di / compiler.php

Anton Kril
źródło
2

Z koncepcji:

Nie musisz wiedzieć, jakiego rodzaju klasy są generowane automatycznie, ponieważ nigdy nie musisz ich dotykać ani używać, nawet powinieneś.

Są generowane (nadal?) W locie, ale później powinny zostać wygenerowane za pomocą komendy cli lub podobnego.

Lista typów, które istnieją, może się powiększać w dowolnym momencie, gdy wewnętrzne części potrzebują nowej. Ale dostęp do nich zawsze miałby miejsce ukryty za normalnymi udokumentowanymi interfejsami API (powszechnie znanymi jako wywołania funkcji)

Flyingmana
źródło
1
Nie jestem pewien, czy „ich użyć”. Oto przykład: W Magento\Cms\Block\Blockkonstruktorze \Magento\Cms\Model\BlockFactoryużywana jest instancja klasy . Tej klasy nigdzie nie ma w kodzie. Występuje tylko w var/generation. Więc jeśli robię podobny moduł, być może będę musiał użyć podobnej klasy.
Marius
2

W ten sposób Magento generuje podejście do nowej platformy zorientowane na aspekty; poprzez faktyczne generowanie „zdarzeń” przed, wokół i po nich zamiast dynamicznego wywoływania ich. Zapewnia to równowagę wygody dla programisty i wydajności platformy.

Niektóre techniki, takie jak wstrzykiwanie automatycznej zależności, są spłaszczane w generowanych klasach, a nie wykonywane przez odbicie - ponownie - jest to technika poprawy wydajności.

philwinkle
źródło
Dzięki za wyjaśnienie „dlaczego?”, Ale moje główne pytania brzmiały „co?” i gdzie?".
Marius