Contratos de serviço Magento
Essencialmente, os contratos de serviço são apenas um conjunto de interfaces e classes que protegem a integridade dos dados e ocultam a lógica de negócios. A razão pela qual os clientes desejam usar isso é que o contrato permite que o serviço evolua sem afetar seus usuários.
A razão pela qual essa atualização é importante é porque ela altera a maneira como os usuários interagem com diferentes módulos. No Magento 1, não havia boas maneiras de interagir com outros módulos. Com os contratos de serviço no Magento 2, você pode acessar e manipular dados facilmente, sem ter que se preocupar com a estrutura do sistema.
Arquitetura de contrato de serviço
A camada de serviço possui dois tipos de interface diferentes: Interfaces de dados e Interfaces de serviço. Interfaces de dados são objetos que preservam a integridade dos dados usando os seguintes padrões:
They’re read-only, since they only define constants and getters.
Getter functions can contain no parameters.
A getter function can only return a simple object type (string, integer, Boolean), a simple type array, and another data interface.
Mixed types can’t be returned by getter functions.
Data entity builders are the only way to populate and modify data interfaces.
As interfaces de serviço fornecem um conjunto de métodos públicos que um cliente pode usar. Existem três subtipos de interfaces de serviço:
Repository Interfaces
Management Interfaces
Metadata Interfaces
Interfaces de repositório
As interfaces de repositório garantem que um usuário possa acessar entidades de dados persistentes. Por exemplo, entidades de dados persistentes no Módulo Cliente são Consumidor, Endereço e Grupo. Isso nos dá três interfaces diferentes:
CustomerRepositoryInterface
AddressRepositoryInterface
GroupRepositoryInterface
Os métodos que essas interfaces possuem são:
Save – If there’s no ID, creates a new record, and updates what’s existing if there is one.
Get – Looks for the IDs in the database and returns a certain data entity interface.
GetList – Finds all data entities that correspond with the search criteria, then gives access to the matches by returning the search result interface.
Delete – Deletes the selected entity
DeleteById – Deletes the entity when you only have its key.
Interfaces de gerenciamento
Essas interfaces contêm funções de gerenciamento diferentes que não são relacionadas aos repositórios. aqui estão alguns exemplos:
AccountManagementInterface contains functions such as createAccount(), isEmailAvailable(), changePassword(), and activate().
AddressManagementInterface checks whether an address is valid by using the validate() function.
O número de padrões está em constante crescimento e, ao fazê-lo, é provável que algumas dessas funções sejam adicionadas a eles.
Interfaces de metadados
As interfaces de metadados fornecem informações sobre todos os atributos definidos para uma entidade específica. Isso também inclui atributos customizados, que você pode acessar com a função getCustomAttribute ($ name). Esses atributos personalizados incluem:
EAV attributes – Defined via the administration interface for a local site. They can differ according to the site, which means that they can’t be represented in the data entity interface written in PHP.
Extension attributes, for which the extension modules are used.
Referência:
https://www.interactivated.me/uk/blog/service-contracts-magento-2/