
magento 2
Mesmo que tanto os Repositórios quanto as Fábricas nos permitam acessar uma Entidade, acho que devemos nos concentrar em sua responsabilidade.
Da documentação do Magento: “As fábricas são classes de serviço que instanciam classes não injetáveis, ou seja, modelos que representam uma entidade de banco de dados. Elas criam uma camada de abstração entre o ObjectManager e o código de negócios.”
Do artigo de Alan Storm: “Um objeto de repositório é responsável por ler e gravar suas informações de objeto em um armazenamento de objetos”
Minha interpretação é: Se nosso propósito é trabalhar com objetos não injetáveis (chamados “novos”), devemos usar Fábricas; se nosso foco for pesquisar/ler/escrever objetos dentro de um armazenamento de objetos, devemos usar Repositórios.
Se existe um repositório e ele faz bem o que você precisa, sempre prefira o repositório.
Os repositórios fazem parte dos Contratos de Serviço (são implementações de interfaces em Api), ou seja, são uma interface pública para outros módulos.
$model->load() não faz parte do contrato de serviço.
Eu tinha uma pergunta sobre esse tópico específico, você pode achar as respostas úteis: Existe alguma razão para preferir $model->load() sobre contratos de serviço?
O seguinte não é a melhor prática oficial do Magento, mas atualmente, os repositórios não dão a você um controle preciso sobre o que carregar.
A API de critérios de pesquisa permite definir filtros, mas, por exemplo, não há como selecionar atributos EAV específicos ou especificar quais tabelas de índice devem ser unidas.
Esses são detalhes de implementação, ocultos das APIs do contrato de serviço, mas geralmente esses detalhes de implementação são importantes e você obtém um desempenho ruim se ignorá-los.
Por esse motivo, assim que os repositórios estão me limitando, não hesito mais em usar as coleções subjacentes.
Pedido que não fatura e e-mail que não sai porque todo job fica missed: como ler a cron_schedule, conferir o…
Uma função curta em PHP 8.3 que transforma Camiseta Preta Tamanho GG em camiseta-preta-tamanho-gg, sem depender do locale do servidor.
O banner registra o clique só no navegador e some. Veja a tabela MySQL e o endpoint que gravam a…
A classe do comando existe e o bin/magento list ignora ela. Falta o registro no di.xml: aqui vai a classe…
Como traduzir duas mil linhas do pt_BR.csv do Magento 2 lendo com fgetcsv e regravando com fputcsv, sem encostar na…
Produto variável respondendo "Desculpe, este produto não está disponível" mesmo com a variação ativa: limpe os transients do WooCommerce e…