Mam dość duże doświadczenie z Magento, ale zdałem sobie sprawę, że nie rozumiem, który sposób załadowania modelu jest właściwy i dlaczego. Przeczytałem wszystko, co mogłem, na ten temat, ale ludzie tłumaczący takie rzeczy nigdy tak naprawdę nie sięgają wystarczająco głęboko, aby wyjaśnić, dlaczego używają tej konkretnej metody zamiast innej. Załóżmy, że nie ma repozytorium dla modelu, który chciałbym załadować.
Do tej pory zawsze używałem modelu w konstruktorze, a następnie po prostu go ładowałem.
public function __construct(
\Vendor\Module\Model\Something $somethingModel
) {
$this->somethingModel = $somethingModel;
}
public function getTestById($id) {
return $this->somethingModel->load($id);
}
I zawsze działało zgodnie z przeznaczeniem, jestem też całkiem pewien, że było to, a przynajmniej było powszechnie używane w rdzeniu.
Ale potem zobaczyłem, jak jeden z moich kolegów używa
modelFactory->create()->load($id)
O ile rozumiem, fabryki są używane do utworzenia nowego podmiotu, na przykład, jeśli chciałbym stworzyć nowy produkt, mogę utworzyć fabrykę, zapełnić ją danymi, a następnie zapisać. Ale znowu zacząłem badać ten temat i zobaczyłem przykład od Fabiana Schmenglera ( Kiedy powinniśmy korzystać z repozytorium i fabryki w Magento 2? ), Który ładował model w ten sposób, a także zniechęcał innych po prostu do ładowania modeli, nie zrobił tego Wyjaśnij, dlaczego oprócz tego, że „nie jest częścią umowy o świadczenie usług”. O ile rozumiem, repozytoria są częścią umów serwisowych, więc nie widzę tutaj żadnego związku, jeśli chodzi o ładowanie modeli, które nie są dostępne przez repozytorium.
Aby dodać jeszcze więcej zamieszania, znalazłem również sposób na wczytanie modelu poprzez pobranie sourceModel z utworzonego modeluFactory, został przedstawiony przez Vinai Kopp ( Jak wdrożyć umowę serwisową dla niestandardowego modułu w Magento 2? ), A teraz jestem całkowicie zagubiony, ponieważ zawsze czytałem, że nie powinienem używać modeli zasobów bezpośrednio.
Tak, czy ktoś mógłby mi powiedzieć, który jest właściwy sposób i dlaczego powinienem go używać zamiast wszystkich innych metod?