Rozumiem, że preferowanym sposobem pracy między modułami w Magento 2 jest korzystanie z umów serwisowych.
Więc jeśli chcę załadować produkt, korzystam z repozytorium produktów:
$product = $productRepository->getById($id);
czyli na podstawie umowy zwracającej instancję Magento\Catalog\Api\Data\ProductInterface
.
Ale zamiast tego mógłbym również użyć starego sposobu, wywołując bezpośrednio warstwę domeny:
$product = $productFactory->create()->load($id);
Czy jest jakiś przypadek, w którym byłoby to konieczne lub przydatne?
Devdocs mówią (wyróżnienie dodane):
Moduł może bezpośrednio wywoływać inny moduł. To ściśle powiązane rozwiązanie nie jest zalecane w większości sytuacji, ale czasami jest nieuniknione .
[...]
Twoja strategia wywoływania kodu warstwy domeny innego modułu jest wysoce zależna od unikalnej konfiguracji i potrzeb twojego systemu.
Źródło: http://devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/domain_layer.html
A komentarz do powiązanego pytania brzmiał:
użycie repozytorium da model danych produktu (
Api/Data/Product
), który jest modelem produktu przekonwertowanym na głupi DTO. Coś do rozważenia, ponieważ są one zupełnie różne
Ale o ile widzę, obiekty są takie same w normalnych warunkach, tylko typy zwracane na phpDoc różnią się ( Magento\Catalog\Api\Data\ProductInterface
/ Magento\Catalog\Model\Product
)