Mir ist bekannt, dass Magento 2 Datenmodelle als Teil der Servicevertragsarchitektur eingeführt hat. Datenmodelle implementieren normalerweise Schnittstellen, die in Api / Data / eines Moduls definiert sind.
Magento scheint aber auch die alten Modelle beibehalten zu haben.
Nehmen wir ein Beispiel zum Modul-Kunden.
- Datenmodell-Schnittstelle definiert in Api / Data / CustomerInterface.php
- Die obige Schnittstelle ist in Model / Data / Customer.php implementiert
- Das Datenmodell verfügt erwartungsgemäß über alle Get- und Setter-Funktionen für die Kundenvariablen
- Zusätzlich zu den oben genannten gibt es auch eine Model / Customer.php. Auch dies hat Getter- und Setter-Funktion. Dies ähnelt eher einem Magento 1-Modell, das eine Verbindung zum ResourceModel herstellt (Model / ResourceModel / Customer.php).
- In Model / ResourceModel / CustomerRepository.php sammeln verschiedene Funktionen Daten aus dem Magnento 1-Modell, übertragen sie in das Datenmodell und geben dann das Datenmodell zurück.
Warum braucht man das alte Modell? Warum kann das Datenmodell keine direkte Verbindung zum ResourceModel herstellen?
\Magento\Customer\Api\Data\CustomerInterface
werden für die REST / SOAP-API verfügbar gemacht (falls aktiviert). Sie benötigen jedoch kein Datenmodell, um auszuwählen, welche Methoden verfügbar gemacht werden sollen, da Sie stattdessen einfach die Schnittstelle mit dem "echten" Modell verbinden können. So wird es gemacht mit\Magento\Catalog\Model\Product
und\Magento\Catalog\Api\Data\ProductInterface