Magento 2: Was sind die Vorteile von Serviceverträgen?

15

Wie einige von Ihnen vielleicht wissen, empfiehlt Magento 2 die Verwendung von Serviceverträgen, um mit Modellen / Sammlungen für CRUD-Aktionen umzugehen.

Laut den Fragen und Antworten von Magento SE scheint es jedoch so zu sein, als würden die meisten Menschen das Modell / Ressourcenmodell / die Sammlung stattdessen direkt verwenden.

Als Beispiel für das Laden eines Angebots kann ich dies direkt über die Fabrik tun:

$this->quoteFactory->create()->load($quoteId);

Wo $this->quoteFactoryist eine Instanz von\Magento\Quote\Model\QuoteFactory

Aber ich kann es auch über einen Servicevertrag wie diesen machen:

$this->quoteRepository->get($quoteId);

Wo $this->quoteRepositoryist eine Instanz von\Magento\Quote\Api\CartRepositoryInterface

Meine Frage ist also, welche Vorteile der Einsatz von Serviceverträgen gegenüber Fabriken hat.

Raphael beim digitalen Pianismus
quelle

Antworten:

18

Vorteile der Nutzung von Serviceverträgen (nach Magento 2-Verständnis)

Serviceverträge haben eine Reihe wichtiger Funktionen für magento 2, wie zum Beispiel:

  • Modul-Upgrade wird einfach.

  • Vereinfachen Sie Anpassungen des Moduls, ohne die Kerndateien zu durchsuchen.

  • Reduzieren Sie den Konflikt zwischen Modulen im System.

  • Magento-Upgrades sind mit Serviceverträgen sicherer.

  • Denn Services bleiben in den neuen Releases unverändert, so dass Upgrades in Zukunft für bestehende Module problemlos möglich sind.

  • Für Modelle / Kollektionen gilt dieser Fall in neuen Versionen nicht.
Rakesh Jesadiya
quelle
2

Vorteile des Servicevertrags:

  • Verbessern Sie die Modularität von Magento

  • Stellen Sie eine gut definierte, dauerhafte API sicher, die andere Module und Erweiterungen von Drittanbietern implementieren können

  • Vereinfachen Sie die Konfiguration von Diensten als Web-APIs.

  • Datenentitäten zeigen ein einfacheres Datenmodell als das Datenmodell in einem zugrunde liegenden relationalen Datenbankschema

  • Verwenden Sie unterschiedliche Speichertechnologien für unterschiedliche Datensammlungen

Jameslj
quelle
2

Ich denke, der größte Vorteil ist, dass Module bestimmen können, welche Funktionalität von anderen Modulen verwendet werden kann. In Magento 1 gab es Helfer, die für diesen Zweck oft missbraucht wurden (aber das ist ein ganz anderer Aspekt), aber in Magento 2 kann Ihr Modul Funktionen für andere Module bereitstellen (z. B. von Entwicklern von Drittanbietern) und diese getrennt und selbst verwalten enthalten.

Dependency Injection bietet ein System, in dem Sie eine Schnittstelle in Ihrer Konstruktion verwenden können, sodass Sie nur auf diese öffentlichen Methoden zugreifen können.

Einige Beispiele:

Möchten Sie ein Produkt mit mehreren Kategorien verknüpfen? Verwendung \Magento\Catalog\Api\CategoryLinkManagementInterface:

$this->categoryLinkManagement->assignProductToCategories(
    $sku,
    $categoryIds
);

Möchten Sie die Lagerbestandsmenge eines Produkts erhöhen? Verwendung Magento\CatalogInventory\Api\StockManagementInterface:

$this->stockManagement->backItemQty(
    $productId,
    $itemsToReceive
);

Diese beiden Beispiele zeigen perfekt die ordnungsgemäße Verwendung von Serviceverträgen. Außerdem bieten sie eine einheitliche Schnittstelle für die Kommunikation mit:

  • Andere Module (wie oben beschrieben)
  • Konsolenbefehle
  • API-Aufrufe
  • etc.
Giel Berkers
quelle