Ich verstehe, dass die bevorzugte Art, in Magento 2 zwischen Modulen zu arbeiten, die Verwendung von Serviceverträgen ist.
Wenn ich also ein Produkt laden möchte, verwende ich das Produkt-Repository:
$product = $productRepository->getById($id);
Das ist vertraglich die Rückgabe einer Instanz von Magento\Catalog\Api\Data\ProductInterface
.
Aber ich könnte stattdessen auch den alten Weg verwenden und die Domain-Ebene direkt aufrufen:
$product = $productFactory->create()->load($id);
Gibt es einen Fall, in dem dies notwendig oder nützlich wäre?
Die Devdocs sagen (Highlight hinzugefügt):
Ein Modul kann direkt in ein anderes Modul aufrufen. Diese eng gekoppelte Lösung wird für die meisten Situationen nicht empfohlen, ist jedoch manchmal unvermeidlich .
[...]
Ihre Strategie zum Aufrufen des Domain-Layer-Codes eines anderen Moduls hängt stark von der Konfiguration und den Anforderungen Ihres Systems ab.
Quelle: http://devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/domain_layer.html
Und ein Kommentar zu einer verwandten Frage lautete:
das Repository verwenden werden Sie ein Produktdatenmodell (
Api/Data/Product
), die ein Produktmodell ist in eine abgespeckte DTO umgewandelt. Etwas zu beachten, da sie ganz anders sind
Aber soweit ich sehe, sind die Objekte unter normalen Bedingungen die gleichen, nur die Rückgabetypen pro phpDoc unterscheiden sich ( Magento\Catalog\Api\Data\ProductInterface
/ Magento\Catalog\Model\Product
)