सबसे पहले, आप किस सिद्धांत के बारे में बात कर रहे हैं, 1 या 2?
एक बड़ा अंतर है। एकमात्र चीज जो दोनों में समान है वह यह है कि वे दोनों पूर्ण ओआरएम हैं। अन्यथा वास्तव में दोनों के बीच कोई संबंध नहीं है।
सिद्धांत 1 ActiveRecords पर आधारित है, सिद्धांत 2 पर डाटा नक्शाकार पैटर्न आधारित है।
दोनों एक ही काम कर सकते हैं, लेकिन दोनों के बीच कुछ महत्वपूर्ण अंतर हैं।
आम तौर पर डेटा मैपर कम "डेवलपर-अनुकूल" है लेकिन बेहतर प्रदर्शन होना चाहिए। क्यूं कर? असल में यह बहुत आसान है। सक्रिय रिकॉर्ड के साथ प्रत्येक इकाई अपने आसपास "सब कुछ", अन्य संस्थाओं के साथ संबंध आदि जानता है। डेटा मैपर के साथ, संस्थाएं गूंगा और हल्के हैं, एक केंद्रीय इकाई (EntityManager/Doctrine2 में UnitOfWork) है जो सभी संबंध मैपिंग को संभालती है। तो स्मृति उपयोग और प्रदर्शन के मामले में डेटा मैपर तेज होना चाहिए।
सिद्धांत लोग कहते हैं कि सिद्धांत 2 कम से कम 50% तेज है कि सिद्धांत 1 (अन्य अंतर भी हैं, न केवल डिजाइन पैटर्न)।
यदि आप इसके लिए महसूस करते हैं, तो आप ActiveRecords को Doctrine2 डेटा मैपर पर भी कार्यान्वित कर सकते हैं। इस blog post पर देखें। मैं जितना संभव हो उतना छोटा कोड रखने के लिए विकास चरण के लिए इस दृष्टिकोण का उपयोग कर रहा हूं। एक बार जब यह उत्पादन में आता है तो मैं अतिरिक्त ActiveRecords परत, और Doctrine2 के डिफ़ॉल्ट डेटा मैपर पर रोलबैक मार दूंगा।
तो निष्कर्ष यह है कि आप दोनों के साथ सबकुछ कर सकते हैं, लेकिन उसी तरह आप कह सकते हैं कि आप कच्चे एसक्यूएल के साथ सबकुछ कर सकते हैं। यदि आप ओआरएम दुनिया में एक नौसिखिया हैं, तो मैं एक्टिव रिकॉर्ड्स के साथ जाने का सुझाव दूंगा, क्योंकि यह आसान है और (आमतौर पर) कम कोड की आवश्यकता होती है। दूसरी ओर, यदि आप एक बड़े, जटिल मॉडल का निर्माण कर रहे हैं, तो मुझे लगता है कि डेटा मैपर बेहतर विकल्प है।
शायद मुझे कुछ गलत मिला, लेकिन इस तरह मैं इसे समझ गया।
कोडइग्निटर सक्रिय रिकॉर्ड्स और सिद्धांत (1 या 2) के बीच तुलना के लिए, मैं वास्तव में नहीं कह सकता, क्योंकि मैंने कभी कोडइग्निटर का उपयोग नहीं किया था। एक बात मुझे यकीन है, कोडइग्निटर डिफ़ॉल्ट ओआरएम की तुलना में सिद्धांत में बहुत अधिक सुविधाएं हैं। उदाहरण के लिए: परिणाम हाइड्रेशन, विरासत (एकल तालिका, कक्षा तालिका), prefetching, आलसी लोडिंग, अतिरिक्त आलसी लोडिंग, एक्सटेंशन, व्यवहार, अनुकूलन, प्रॉक्सी, डेटाटाइम हैंडलिंग ... यह एक विशाल और पूर्ण ओआरएम है विशेषताएं, जबकि किसी भी "डिफ़ॉल्ट ढांचे ओआरएम" के साथ मेरा अनुभव यह है कि उनका मुख्य लक्ष्य जितना संभव हो उतना आसान होना है, इसलिए एक नौसिखिया इसे आसानी से लटका सकता है। सिद्धांत एक शक्तिशाली जानवर है, और निश्चित रूप से कोडइग्निटर ओआरएम में निर्मित की तुलना में अधिक कुशल और/या तार्किक रूप से अधिक सही तरीके से बहुत सी चीजें कर सकता है। नकारात्मकता यह है कि सीखने और कोड में अधिक समय लगता है, और यह एक बड़ी लाइब्रेरी है, हजारों फाइलों के साथ, इसलिए बस कुछ भी चलने के लिए हल्का विकल्प की तुलना में कुछ ओवरहेड जोड़ता है।
सिद्धांत एक पूर्ण ओआरएम है जो सक्रिय रिकॉर्ड पैटर्न लागू करता है। कोडइग्निटर की सक्रिय रिकॉर्ड क्लास पैटर्न के "संशोधित" संस्करण के आधार पर एक क्वेरी बिल्डर का अधिक है। – birderic
हाय बिरडेरिक, त्वरित उत्तर के लिए धन्यवाद। क्या आप मुझे एक उदाहरण दे सकते हैं जहां यह खेल में आएगा? क्या हम सीआरयूडी परिचालन जैसी चीजों के बारे में बात कर रहे हैं? – MatthewSchenker
मैं एक लंबा उत्तर लिखूंगा। मुझे सिद्धांत के साथ कोई अनुभव नहीं है लेकिन मैं दोनों की तुलना करने के लिए अपनी पूरी कोशिश करूंगा। – birderic