Ho molta esperienza con Magento ma mi sono reso conto che non capisco quale modo di caricare un modello sia quello corretto e perché. Ho letto tutto quello che potevo sull'argomento, ma le persone che spiegano cose come questa non sono mai abbastanza approfondite da spiegare, perché usare questo metodo specifico invece di un altro. Supponiamo che non ci siano repository per il modello che voglio caricare.
Fino ad ora usavo sempre il modello nel costruttore e poi semplicemente lo caricavo.
public function __construct(
\Vendor\Module\Model\Something $somethingModel
) {
$this->somethingModel = $somethingModel;
}
public function getTestById($id) {
return $this->somethingModel->load($id);
}
E ha sempre funzionato come previsto, sono anche abbastanza sicuro che sia o almeno sia stato usato comunemente nel core.
Ma poi ho visto usare uno dei miei colleghi
modelFactory->create()->load($id)
Per quanto ho capito, le fabbriche vengono utilizzate per creare una nuova entità, ad esempio, se volessi creare un nuovo prodotto, posso creare la fabbrica, popolarla con i dati e salvarla. Ma poi di nuovo, ho iniziato a fare ricerche sull'argomento e ho visto degli esempi di Fabian Schmengler ( Quando dovremmo usare un repository e una fabbrica in Magento 2? ) Che stava caricando il modello in questo modo e scoraggiando anche altri dal semplice caricamento dei modelli, non ha fatto Spiego perché, oltre a dire che "non fa parte del contratto di servizio". Per quanto ho capito, i repository fanno parte dei contratti di servizio, quindi non vedo alcuna connessione qui quando si tratta di caricare modelli che non sono disponibili tramite un repository.
Per aggiungere un po 'più di confusione, ho anche trovato un modo per caricare il modello ottenendo il modello di risorsa dal modello modelFactory creato, è stato presentato da Vinai Kopp ( Come implementare il contratto di servizio per un modulo personalizzato in Magento 2? ) E ora sono completamente perso poiché ho sempre letto che non avrei dovuto usare direttamente i modelli di risorse.
Quindi sì, qualcuno potrebbe dirmi qual è il modo corretto e perché dovrei usarlo al posto di tutti gli altri metodi?