Magento 2: quais são os benefícios do uso de contratos de serviço?

15

Portanto, como alguns de vocês devem saber, a maneira recomendada pelo Magento 2 de lidar com modelos / coleções para ações de CRUD é usar contratos de serviço.

Mas ainda de acordo com as perguntas e respostas do Magento SE, parece que a maioria das pessoas costuma usar o modelo / modelo de recurso / coleção diretamente.

Como exemplo para carregar uma cotação, eu posso fazê-lo diretamente na fábrica assim:

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

Onde $this->quoteFactoryé uma instância de\Magento\Quote\Model\QuoteFactory

Mas também posso fazê-lo através de contrato de serviço como este:

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

Onde $this->quoteRepositoryé uma instância de\Magento\Quote\Api\CartRepositoryInterface

Então, minhas perguntas são quais são os benefícios do uso de contratos de serviço sobre fábricas?

Raphael na Digital Pianism
fonte

Respostas:

18

Benefícios do uso de contratos de serviço (conforme entendimento do magento 2)

Os contratos de serviço têm várias funções importantes para o magento 2, como:

  • A atualização do módulo se torna fácil.

  • Simplifique as personalizações do módulo sem pesquisar nos arquivos principais.

  • Reduza o conflito entre os módulos no sistema.

  • A atualização do Magento é mais segura usando o contrato de serviço.

  • Os serviços permanecerão inalterados nas novas versões, facilitando a atualização no futuro para o módulo existente.

  • Para modelos / coleções, este caso não é verdadeiro em novos lançamentos.
Rakesh Jesadiya
fonte
2

Benefícios do contrato de serviço:

  • Aprimore a modularidade do Magento

  • Garanta uma API durável e bem definida que outros módulos e extensões de terceiros possam implementar

  • Facilite a configuração de serviços como APIs da web.

  • As entidades de dados revelam um modelo de dados mais simples que o modelo de dados em um esquema de banco de dados relacional subjacente

  • Use diferentes tecnologias de armazenamento para diferentes coleções de dados

Jameslj
fonte
2

Eu acho que o maior benefício é que os módulos podem determinar qual funcionalidade pode ser usada por outros módulos. No Magento 1, você tinha ajudantes que costumavam ser mal utilizados para esse fim (mas isso é outro assunto discutido), mas no Magento 2 seu módulo pode fornecer funcionalidade a outros módulos (por exemplo, por desenvolvedores de terceiros) e separá-los e se auto -contained.

A Injeção de Dependência fornece um sistema em que você pode usar uma interface em sua construção para ter acesso apenas a esses métodos públicos.

Alguns exemplos:

Deseja vincular um produto a várias categorias? Use \Magento\Catalog\Api\CategoryLinkManagementInterface:

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

Deseja aumentar a quantidade de estoque de um produto? Use Magento\CatalogInventory\Api\StockManagementInterface:

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

Esses dois exemplos mostram perfeitamente o uso adequado dos contratos de serviço. Além disso, eles fornecem uma interface uniforme para se comunicar com:

  • Outros módulos (como descrito acima)
  • Comandos do console
  • Chamadas de API
  • etc.
Giel Berkers
fonte