Tenho muita experiência com o Magento, mas percebi que não entendo qual a maneira de carregar um modelo é a correta e por quê. Eu li tudo o que pude sobre o tópico, mas as pessoas que explicam coisas como essa nunca são suficientemente profundas para explicar, por que usar esse método específico em vez de outro. Vamos supor que não há repositório para o modelo que eu quero carregar.
Até agora, eu estava sempre usando o modelo no construtor e, em seguida, simplesmente carregá-lo.
public function __construct(
\Vendor\Module\Model\Something $somethingModel
) {
$this->somethingModel = $somethingModel;
}
public function getTestById($id) {
return $this->somethingModel->load($id);
}
E sempre funcionou como planejado, também tenho certeza de que é ou pelo menos foi usado normalmente no núcleo.
Mas então eu vi um dos meus colegas usando
modelFactory->create()->load($id)
Tanto quanto eu entendo as fábricas estão sendo usadas para criar uma nova entidade, por exemplo, se eu quiser criar um novo produto, posso criar a fábrica, preenchê-la com dados e salvá-la. Mas, novamente, comecei a pesquisar o tópico e vi exemplos de Fabian Schmengler ( quando devemos usar um repositório e uma fábrica no Magento 2? ) Que estava carregando o modelo dessa maneira e também desencorajava outros a simplesmente carregá-los, ele não ' Não explique por que, além de dizer que "não faz parte do contrato de serviço". Pelo que entendi, os repositórios fazem parte dos contratos de serviço, portanto, não vejo nenhuma conexão aqui quando se trata de carregar modelos que não estão disponíveis através de um repositório.
Para adicionar mais confusão, eu também encontrei uma maneira de carregar o modelo, obtendo o resourceModel do modelFactory criado, foi apresentado por Vinai Kopp ( Como implementar o contrato de serviço para um módulo personalizado no Magento 2? ) E agora estou completamente perdido, pois sempre li que não deveria usar modelos de recursos diretamente.
Então, sim, alguém poderia me dizer qual é a maneira correta e por que eu deveria usá-la em vez de todos os outros métodos?