У меня довольно большой опыт работы с Magento, но я понял, что не понимаю, какой способ загрузки модели является правильным и почему. Я прочитал все, что мог, об этой теме, но люди, объясняющие подобные вещи, никогда не заходили достаточно глубоко, чтобы объяснить, зачем использовать этот конкретный метод вместо другого. Давайте предположим, что нет репозитория для модели, которую я хочу загрузить.
До сих пор я всегда использовал модель в конструкторе, а затем просто загружал ее.
public function __construct(
\Vendor\Module\Model\Something $somethingModel
) {
$this->somethingModel = $somethingModel;
}
public function getTestById($id) {
return $this->somethingModel->load($id);
}
И это всегда работало как задумано, я также уверен, что он или, по крайней мере, широко использовался в ядре.
Но потом я увидел, как один из моих коллег использовал
modelFactory->create()->load($id)
Насколько я понимаю, фабрики используются для создания новой сущности, например, если я хочу создать новый продукт, я могу создать фабрику, заполнить ее данными, а затем сохранить. Но с другой стороны, я начал исследовать эту тему и увидел пример от Фабиана Шменглера ( когда мы должны использовать репозиторий и фабрику в Magento 2? ), Который загружал модель таким образом, а также отговаривал других от простой загрузки моделей, он не объяснить, хотя, кроме того, что он «не является частью договора на обслуживание». Насколько я понимаю, репозитории являются частью сервисных контрактов, поэтому я не вижу здесь никакой связи, когда речь идет о загрузке моделей, которые недоступны через репозиторий.
Чтобы добавить еще больше путаницы, я также нашел способ загрузки модели, получая resourceModel из созданной modelFactory, он был представлен Vinai Kopp ( Как реализовать контракт на обслуживание для пользовательского модуля в Magento 2? ), И теперь я полностью потерян, поскольку я всегда читал, что я не должен использовать модели ресурсов напрямую.
Так что да, кто-то может сказать мне, какой путь правильный и почему я должен использовать его вместо всех других методов?