Je comprends que la façon préférée de travailler entre les modules dans Magento 2 est d'utiliser les contrats de service.
Donc, si je veux charger un produit, j'utilise le référentiel produit:
$product = $productRepository->getById($id);
qui est par contrat renvoyant une instance de Magento\Catalog\Api\Data\ProductInterface
.
Mais je pourrais également utiliser l'ancienne méthode à la place, en appelant directement la couche de domaine:
$product = $productFactory->create()->load($id);
Y a-t-il des cas où cela serait nécessaire ou utile?
Les devdocs disent (surlignage ajouté):
Un module peut appeler directement un autre module. Cette solution étroitement couplée n'est pas recommandée dans la plupart des situations, mais est parfois inévitable .
[...]
Votre stratégie pour appeler le code de couche de domaine d'un autre module dépend fortement de la configuration et des besoins uniques de votre système.
Source: http://devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/domain_layer.html
Et un commentaire sur une question connexe a déclaré:
l'utilisation du référentiel vous donnera un modèle de données produit (
Api/Data/Product
), qui est un modèle produit converti en DTO simplifié. Quelque chose à considérer, car ils sont très différents
Mais pour autant que je puisse voir, les objets sont les mêmes dans des conditions normales, seuls les types de retour par phpDoc diffèrent ( Magento\Catalog\Api\Data\ProductInterface
/ Magento\Catalog\Model\Product
)