मुझे मैगेंटो के साथ काफी अनुभव है लेकिन मैंने महसूस किया कि मुझे समझ नहीं आता कि मॉडल को लोड करने का कौन सा तरीका सही है और क्यों। मैंने वह सब कुछ पढ़ा है जो मैं इस विषय के बारे में कर सकता हूं, लेकिन इस तरह से सामान की व्याख्या करने वाले लोग वास्तव में कभी भी गहराई से समझाने के लिए नहीं जाते हैं, इस विशिष्ट पद्धति का उपयोग दूसरे के बजाय क्यों करें। मान लें कि जिस मॉडल को मैं लोड करना चाहता हूं, उसके लिए कोई रिपॉजिटरी नहीं है।
अब तक मैं निर्माण में हमेशा मॉडल का उपयोग कर रहा था और फिर इसे लोड कर रहा था।
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 में एक रिपोजिटरी और फैक्ट्री का उपयोग करना चाहिए? ) से उदाहरण देखा ? जो इस तरह से मॉडल लोड कर रहा था और दूसरों को भी बस मॉडल लोड करने से हतोत्साहित किया, उसने 'नहीं किया। t यह क्यों समझाते हुए भी कहा कि यह 'सेवा अनुबंध का हिस्सा नहीं है'। जहां तक मैं समझता हूं कि रिपॉजिटरी सेवा अनुबंधों का हिस्सा हैं इसलिए मुझे यहां कोई कनेक्शन नहीं दिखता है जब यह उन लोडिंग मॉडल की बात आती है जो रिपॉजिटरी के माध्यम से उपलब्ध नहीं हैं।
कुछ और भ्रम को जोड़ने के लिए, मैंने मॉडलफैक्ट्री से रिसोर्समॉडल प्राप्त करके मॉडल को लोड करने का एक तरीका पाया है, यह विनई कोप्प (मैगेंटो 2 में एक कस्टम मॉड्यूल के लिए सेवा अनुबंध कैसे लागू करें) द्वारा प्रस्तुत किया गया था और अब मैं हूं ? पूरी तरह से खो जाने के कारण मैंने हमेशा पढ़ा है कि मुझे संसाधन मॉडल का सीधे उपयोग नहीं करना चाहिए।
तो हाँ, क्या कोई मुझे बता सकता है कि कौन सा तरीका सही है और मुझे अन्य सभी तरीकों के बजाय इसका उपयोग क्यों करना चाहिए?