Magento 2: मॉडल और डेटा मॉडल के बीच अंतर


13

मुझे पता है कि Magento 2 ने डेटा मॉडल को सेवा अनुबंध वास्तुकला के हिस्से के रूप में पेश किया है। डेटा मॉडल आमतौर पर एक मॉड्यूल के एपीआई / डेटा / में परिभाषित इंटरफेस को लागू करते हैं।

लेकिन, लगता है कि Magento ने पुराने मॉडल को भी बनाए रखा है।

चलो मॉड्यूल-ग्राहक के लिए एक उदाहरण लेते हैं।

  • Api / Data / CustomerInterface.php में परिभाषित डेटा मॉडल इंटरफ़ेस
  • उपरोक्त इंटरफ़ेस मॉडल / डेटा / Customer.php में लागू किया गया है
  • डेटा मॉडल में ग्राहक चर के लिए सभी गेट्टर और सेटर फ़ंक्शन होते हैं, जैसा कि कोई अपेक्षा करता है
  • उपरोक्त के अलावा एक मॉडल / Customer.php भी है। यह भी गेट्टर और सेटर फ़ंक्शन है। यह एक Magento 1 मॉडल की तरह है जो संसाधनमॉडल (मॉडल / ResourceModel / Customer.php) से जुड़ता है
  • मॉडल / ResourceModel / CustomerRepository.php में, विभिन्न फ़ंक्शन मैग्नेटो 1 मॉडल से डेटा एकत्र करते हैं, उन्हें डेटा मॉडल में स्थानांतरित करते हैं, और फिर डेटा मॉडल वापस करते हैं।

पुराने मॉडल की आवश्यकता क्यों है? डेटा मॉडल सीधे संसाधनमॉडल से क्यों नहीं जुड़ सकता है?

जवाबों:


7

मेरी व्याख्या:

एक मॉडल और डेटा मॉडल के बीच अंतर को समझना बहुत मुश्किल है। अगर मुझे कुछ शब्दों में कहना है तो मैं कह सकता हूं कि एक मॉडल इंजन का प्रतिनिधित्व करता है और एक डेटा मॉडल इसकी जानकारी का प्रतिनिधित्व करता है

अपने उदाहरण में, ग्राहक इकाई के साथ, आप उदाहरण के लिए देख सकते हैं कि कैसे विधि authenticateया validatePasswordग्राहक मॉडल में रखे जाते हैं क्योंकि वे इंजन का हिस्सा हैं और वे सीधे जानकारी को संभालने के लिए नहीं जा रहे हैं। दूसरी तरफ, getExtensionAttributesडेटा मॉडल में जानकारी के टुकड़ों को संभालने के बाद से तरीकों को रखा जाता है।

मुझे लगता है कि यह सिर्फ एक बेहतर प्रोजेक्ट हैंडलिंग है, मॉडल और संसाधन मॉडल के बीच विभाजन की तरह, आप पूछ सकते हैं कि आपको उनकी आवश्यकता क्यों है।

आपको उनकी आवश्यकता क्यों है:

यदि आप API का उपयोग करके ग्राहक की जानकारी (उदाहरण के लिए) का खुलासा करना चाहते हैं , तो आपको अपनी इकाई की सभी विशेषताओं को परिभाषित करने वाले गेटर्स के साथ एक इंटरफ़ेस ( \Magento\Customer\Api\Data\CustomerInterface) की आवश्यकता होगी , और यदि आपके पास कोई अन्य गेट्टर विधि है , तो उस जानकारी का प्रतिनिधित्व न करें जिसे आप उजागर करना चाहते हैं (जैसे: ), आपको कोई समस्या है!getRandomConfirmationKey

थी इसलिए, मेरे उदाहरण में, getRandomConfirmationKeyमॉडल का हिस्सा है ( \Magento\Customer\Model\Customer), जबकि getFirstnameडेटा मॉडल का हिस्सा है।

एक त्वरित नियम हो सकता है:

  • यदि आपकी विधि किसी तालिका स्तंभ, विशेषता या किसी भी प्रकार की इकाई जानकारी का प्रतिनिधित्व करती है, तो डेटा मॉडल में जाना चाहिए ।
  • यदि आपका तरीका जानकारी पर एक "कार्रवाई" है , तो यह जानकारी को संभालता है या आप इसे webapi.xml में घोषित करते हैं , तो यह एक मॉडल विधि होनी चाहिए ।

पद:

कुछ शब्दों में: एक डेटा मॉडल पर लगभग डीटीओ के रूप में विचार करें।


\Magento\Customer\Api\Data\CustomerInterfaceREST / SOAP API (यदि सक्षम है) के लिए सभी विधियाँ उजागर हैं। हालाँकि, आपको यह चुनने के लिए डेटा मॉडल की आवश्यकता नहीं है कि कौन सी विधियाँ उजागर हुई हैं, क्योंकि आप इंटरफ़ेस को इसके बजाय 'वास्तविक' मॉडल से जोड़ सकते हैं। इस तरह से यह किया गया है \Magento\Catalog\Model\Productऔर\Magento\Catalog\Api\Data\ProductInterface
मिलान Simek

2

@ Phoenix128_RiccardoT जवाब में जोड़ना, ध्यान देने योग्य है कि रिपॉजिटरी (यानी MagentoCms\Api\BlockRepositoryया Magento\Customer\Api\CustomerRepositoryInterface) यह भी अपेक्षा करता है कि आप डेटा मॉडल प्रदान करेंगे और नियमित नहीं। डेटा मॉडल मानक मॉडल पर एक अमूर्त परत है जो केवल इकाई द्वारा प्रदान किए गए डेटा को उजागर करता है। इस डेटा पर सभी "क्रियाएं" कहीं और स्थानांतरित की जाती हैं।

यह Symfony2 और Symfony3 में इकाई के विचार जैसा लगता है, जहां संस्थाओं में केवल डेटा होता है और इकाई प्रबंधक में कोई भी डेटा हेरफेर हो रहा है। Magento2 में यह भूमिका, मुझे विश्वास है, रिपॉजिटरी को दी गई थी।

पुराने मॉडल अभी भी हमारे साथ हैं क्योंकि वे magento2 विकसित किया गया था। वे स्पष्ट रूप से रिक्त index.php से शुरू नहीं हुए, लेकिन M1 से कुछ कोड का पुन: उपयोग किया। जब आप मानक मॉडल के तरीकों पर एक नज़र डालें ( load(), save(), और delete()) सभी के रूप में चिह्नित कर रहे हैं deprecated। ऐसा इसलिए है क्योंकि उस नौकरी को रिपॉजिटरी में स्थानांतरित कर दिया गया है (दी गई है कि कुछ मामलों में सभी रिपॉजिटरी अब इस नियमित मॉडल save()विधि को बुला रहे हैं लेकिन सड़क मुझे स्पष्ट लगती है)।


1
क्या उत्पाद डेटा मॉडल के बारे में। कोई उत्पाद डेटा मॉडल नहीं है
शिवकुमार

2

मॉडल भंडारण स्वतंत्र व्यापार तर्क को कूटबद्ध करते हैं, वे डेटाबेस इंजन या उदाहरणों के बारे में नहीं जानते हैं, Magento 2 में डेटा मॉडल डेटा ट्रांसफर ऑब्जेक्ट्स (DTOs) हैं, DTO (डेटा मॉडल) का कार्यान्वयन Magento CRUD मॉडल (मॉडल के लिए विशिष्ट इंटरफेस) ) निर्धारित करता है कि मैगेंटो वेबएपीआई के माध्यम से कौन से वर्ग तरीके उपलब्ध हैं।

Model/Data/Customer.phpयह निर्धारित करता है कि एपीआई के लिए कौन से तरीके उपलब्ध हैं जबकि Model/Customer.phpविरासत मेग्नेटो में 1 प्रकार के कस्टम गेटर्स का कार्यान्वयन और गैर एपीआई संचालन के लिए उपलब्ध बसावट है।

Model/ResourceModel/CustomerRepository.php Magento 2 - सेवा अनुबंध में पेश की गई एक नई सुविधा का हिस्सा है, यह DTO (डेटा मॉडल) के संयोजन के साथ काम करता है।

जैसा कि हम जानते हैं कि Magento ORM में मॉडल, संसाधन मॉडल और संग्रह शामिल हैं और डेटाबेस पर निर्भर करता है, सेवा अनुबंध का उद्देश्य स्टोरेज लॉजिक को छुपाना है, ताकि रिपॉजिटरी (सेवा अनुबंध) से जुड़ा क्लाइंट लक्ष्य संग्रहण के बारे में परवाह न करे यन्त्र।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.