Comprendo che il modo preferito di lavorare tra i moduli in Magento 2 sta usando i contratti di servizio.
Quindi, se voglio caricare un prodotto, utilizzo il repository del prodotto:
$product = $productRepository->getById($id);
che è contrattualmente restituito un'istanza di Magento\Catalog\Api\Data\ProductInterface
.
Ma potrei anche usare il vecchio modo, chiamando direttamente il livello di dominio:
$product = $productFactory->create()->load($id);
Esiste un caso in cui ciò sarebbe necessario o utile?
I devdocs dicono (punto culminante aggiunto):
Un modulo può chiamare direttamente in un altro modulo. Questa soluzione strettamente accoppiata non è consigliata per la maggior parte delle situazioni, ma a volte è inevitabile .
[...]
La tua strategia per chiamare il codice del livello di dominio di un altro modulo dipende fortemente dalla configurazione unica e dalle esigenze del tuo sistema.
Fonte: http://devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/domain_layer.html
E un commento su una domanda correlata ha dichiarato:
l'utilizzo del repository ti darà un modello di dati del prodotto (
Api/Data/Product
), che è un modello di prodotto convertito in un DTO minimizzato. Qualcosa da considerare, poiché sono abbastanza diversi
Ma per quanto posso vedere gli oggetti sono gli stessi in condizioni normali, solo i tipi di ritorno per phpDoc differiscono ( Magento\Catalog\Api\Data\ProductInterface
/ Magento\Catalog\Model\Product
)