Magento 2: quels sont les avantages de l'utilisation des contrats de service?

15

Donc, comme certains d'entre vous le savent peut-être, Magento 2 a recommandé d'utiliser des contrats de service pour gérer les modèles / collections pour les actions CRUD.

Mais toujours selon les questions et réponses de Magento SE, il semble que la plupart des gens ont tendance à utiliser directement le modèle / modèle de ressource / collection.

À titre d'exemple pour charger un devis, je peux le faire directement via l'usine comme ceci:

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

$this->quoteFactoryest une instance de\Magento\Quote\Model\QuoteFactory

Mais je peux aussi le faire via un contrat de service comme celui-ci:

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

$this->quoteRepositoryest une instance de\Magento\Quote\Api\CartRepositoryInterface

Ma question est donc quels sont les avantages de l'utilisation des contrats de service par rapport aux usines?

Raphael chez Digital Pianism
la source

Réponses:

18

Avantages de l'utilisation des contrats de service, (selon la compréhension de magento 2)

Les contrats de service ont un certain nombre de fonctions importantes pour magento 2, telles que:

  • La mise à niveau du module devient facile.

  • Simplifiez les personnalisations du module sans creuser dans les fichiers principaux.

  • Réduisez le conflit entre les modules du système.

  • La mise à niveau de Magento est plus sûre en utilisant un contrat de service.

  • Pour les services resteront inchangés dans les nouvelles versions de celui-ci, la mise à niveau à l'avenir est facile pour le module existant.

  • Pour les modèles / collections, ce cas n'est pas vrai dans les nouvelles versions.
Rakesh Jesadiya
la source
2

Avantages du contrat de service:

  • Améliorez la modularité de Magento

  • Assurez une API bien définie et durable que d'autres modules et extensions tierces peuvent implémenter

  • Facilitez la configuration des services en tant qu'API Web.

  • Les entités de données révèlent un modèle de données plus simple que le modèle de données dans un schéma de base de données relationnelle sous-jacent

  • Utiliser différentes technologies de stockage pour différentes collections de données

Jameslj
la source
2

Je pense que le plus grand avantage est que les modules peuvent déterminer quelles fonctionnalités peuvent être utilisées par d'autres modules. Dans Magento 1, vous aviez des assistants qui étaient souvent mal utilisés à cette fin (mais c'est un tout autre sujet), mais dans Magento 2, votre module peut fournir des fonctionnalités à d'autres modules (par exemple par des développeurs tiers) et les séparer -contenu.

L'injection de dépendance fournit un système dans lequel vous pouvez utiliser une interface dans votre construction afin que vous n'ayez accès qu'à ces méthodes publiques.

Quelques exemples:

Vous souhaitez associer un produit à plusieurs catégories? Utilisation \Magento\Catalog\Api\CategoryLinkManagementInterface:

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

Vous voulez augmenter la quantité de stock d'un produit? Utilisation Magento\CatalogInventory\Api\StockManagementInterface:

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

Ces deux exemples montrent parfaitement la bonne utilisation des contrats de service. En plus de cela, ils fournissent une interface uniforme pour communiquer avec:

  • Autres modules (comme décrit ci-dessus)
  • Commandes de la console
  • Appels API
  • etc.
Giel Berkers
la source