2009-09-10 8 views
10

मैं कोडइग्निटर के साथ टंकण कर रहा हूं और पहली बार सक्रिय रिकॉर्ड्स में आया हूं। सबसे पहले मैंने इसे उन लोगों के लिए कुछ खारिज कर दिया जो वास्तव में एसक्यूएल लिखना नहीं जानते हैं। मुझे अब एहसास है कि मेरा विश्लेषण त्रुटिपूर्ण था और सक्रिय रिकॉर्ड्स विशेष रूप से रेल में बहुत प्रमुख हैं।सक्रिय रिकॉर्ड्स का उद्देश्य क्या है?

लेकिन सक्रिय रिकॉर्ड्स का क्या उद्देश्य है? क्या यह अलग-अलग आरडीबीएमएस व्यक्तित्वों से दूर है। यदि ऐसा है तो मैंने सोचा कि ऐसा नहीं है कि एसक्यूएल क्या करना है। इसके अलावा सबसे अच्छा अभ्यास क्या है, क्या मुझे इनका उपयोग करना चाहिए? ActiveRecord और भंडार पैटर्न:

अग्रिम

उत्तर

5

"सक्रिय रिकॉर्ड पैटर्न" सबसे प्रोग्रामिंग चौखटे के अभिन्न हिस्सा बन जाता है का नेतृत्व करेंगे है। यह सरल सीआरयूडी (बनाएँ, अद्यतन, पढ़ें, हटाएं) कार्यों को प्राप्त करने के लिए तेज़ी से बनाता है। उदाहरण के लिए कई सामान्य और सरल डेटा ऑब्जेक्ट्स को सम्मिलित करने, अपडेट करने और हटाने के लिए कई एसक्यूएल लिखने के बजाय, यह आपको डेटा ऑब्जेक्ट को मान असाइन करने और कमांड चलाने के लिए अनुमति देता है। $ ऑब्जेक्ट-> सेव(), एसक्यूएल संकलित और आपके लिए निष्पादित किया गया है।

अधिकांश ढांचे में उनके संबंधित सक्रिय रिकॉर्ड मॉडल के भीतर डेटा संबंध भी लागू होते हैं जो आपके ऑब्जेक्ट से संबंधित डेटा तक पहुंच को सरल बना सकते हैं। उदाहरण के लिए, कोडइग्निटर में, यदि आपने निर्दिष्ट किया है कि किसी श्रेणी में "कई हैं" उत्पाद डेटाबेस से श्रेणी ऑब्जेक्ट लोड करने के बाद, आप कोड के एक साधारण रेखा के साथ अपने बच्चे के उत्पादों को सूचीबद्ध कर सकते हैं।

foreach ($category->products as $product) { 
    echo $product->name; 
} 

सक्रिय रिकॉर्ड का एक अन्य लाभ है, जैसा कि आप कहते हैं, कि यह अपने कोड आसानी से विभिन्न डेटाबेस प्लेटफार्मों पर पोर्टेबल (इतने लंबे समय रूपरेखा है कि आप उपयोग कर रहे अपनी चुनी डेटाबेस के लिए एक ड्राइवर के रूप में) बनाता है और इस हालांकि अभी यह महत्वपूर्ण प्रतीत नहीं होने की संभावना है, यदि आपका आवेदन लोकप्रिय हो जाता है तो मेरे पास बाद की तारीख में अधिक मूल्य है!

उम्मीद है कि इससे मदद मिलेगी। विकिपीडिया सक्रिय रिकॉर्ड अच्छी तरह से वर्णन करता है (http://en.wikipedia.org/wiki/Active_record_pattern) और कोडइग्निटर दस्तावेज़ भी होंगे। व्यक्तिगत रूप से, मैं KohanaPHP (http://www.kohanaphp.com) का उपयोग करता हूं जो कोडइग्निटर का PHP5 केवल कांटा है और मुझे लगता है कि यह ORM मॉडल बहुत उपयोगी हैं!

8

सक्रिय रिकॉर्ड है डेटा का उपयोग के लिए एक डिजाइन पैटर्न ...

फिलहाल मैं डेटा का उपयोग के बारे में के पार चलो लगते हैं दो मुख्य डिजाइन पैटर्न देखते हैं धन्यवाद

सक्रिय रिकॉर्ड

आपका वस्तुओं एक डीबी के अपने राज्य बने (या अन्य हठ तंत्र) के लिए तरीकों को शामिल तो:

आपके पास ग्राहक वस्तु हो सकती है।

ग्राहक ऑब्जेक्ट में ग्राहक .वे() ;, ग्राहक। गेट (int आईडी) जैसी विधियों का एक समूह होगा; और दूसरे।

इन तरीकों से वास्तविक दुनिया में किसी ग्राहक के साथ वास्तव में कुछ भी नहीं है। वे वास्तव में आपके आवेदन के बुनियादी ढांचे के बारे में हैं।

भंडार पैटर्न

भंडार पैटर्न में, अपने ग्राहक वस्तु एक POCO, या मूक वस्तु होगा। यह केवल तरीकों और गुण कि यह वास्तव में एक ग्राहक (नाम, ईमेल पता, सूची आदेश, आदि जैसी चीजों) का प्रतिनिधित्व करने की जरूरत है

आप ग्राहक बनाए रखना चाहते है - आप बस इसे अपने भंडार को पारित

रिपोजिटरी। सेव (माई कस्टमर)।

सक्रिय रिकॉर्ड पैटर्न त्वरित और काम करने में आसान है। दुर्भाग्यवश, यह इन विधियों के साथ आपके डोमेन मॉडल को अव्यवस्थित करता है, जिसका वास्तव में ग्राहक के साथ कुछ भी नहीं है। इससे समय के साथ आपके डोमेन मॉडल को बनाए रखना मुश्किल हो जाता है।

बहुत सी स्थिति के लिए सक्रिय रिकॉर्ड पैटर्न का उपयोग करना बहुत उपयुक्त है। उदाहरण के लिए - यदि मैं एक काफी सरल ऐप लिख रहा हूं जो शायद ज्यादा नहीं बदलेगा, तो शायद मैं सबसोनिक को फायर कर दूंगा और अपना सक्रिय रिकॉर्ड डीएएल उत्पन्न करूंगा। मैं 20 मिनट के भीतर अपना बिजनेस कोड कोडिंग कर रहा हूं और सभी डीबी सामानों को पहले से ही ख्याल रखा जाता है। बदलने के लिए

, तो दूसरी ओर, मैं एक विशेष रूप से जटिल डोमेन मॉडलिंग कर रहा हूँ, उच्च संवेदनशीलता के साथ, मैं अपने डोमेन मॉडल को साफ रखने चाहते हैं, और nHibernate या इसी तरह के भंडार पैटर्न को लागू ...

यह लंबे समय से रहा है क्योंकि मैंने ADO.Net का उपयोग करके अपना स्वयं का डेटा एक्सेस लॉन्च किया है, और मैं वास्तव में इसकी अनुशंसा नहीं करता हूं कि अब बहुत सारे डेटा एक्सेस टूल्स उपलब्ध हैं।

+0

+1 में सबसे अच्छी सुविधाओं में से एक है। बहुत अच्छी स्पष्टीकरण –

0

सक्रिय रिकॉर्ड एक ओआरएम है - क्या आपने ऑब्जेक्ट-रिलेशन मैपिंग तकनीक पर एक नज़र डाली है? मुझे लगता है कि अगर आप ओआरएम समझते हैं, तो आप लाभ देखना शुरू कर देंगे।

+0

ऐसे ओआरएम रहे हैं जिनके नाम पर "सक्रिय रिकॉर्ड" है, लेकिन सक्रिय रिकॉर्ड अधिक एंटरप्राइज़ एप्लिकेशन डिज़ाइन पैटर्न है। मेरे जवाब में मार्टिन फाउलर पुस्तक देखें, इन चीजों को साफ़ करने के लिए यह एक अच्छी किताब है। – Ash

+0

हाय ऐश, इसके लिए धन्यवाद - एक पढ़ा जाएगा ... – JonB

2

मैं इस पैटर्न पर अपना खुद का विचार दे सकता हूं लेकिन सक्रिय रिकॉर्ड (और कई अन्य) का सर्वश्रेष्ठ कवरेज मार्टिन फाउलर द्वारा Patterns of Enterprise Application Architecture है।

10 अध्याय से:

सक्रिय रिकॉर्ड

एक वस्तु है कि एक डेटाबेस तालिका या दृश्य में एक पंक्ति लपेटता, डेटाबेस का उपयोग समाहित, और उस डेटा पर डोमेन तर्क कहते हैं।

एक ऑब्जेक्ट में डेटा और व्यवहार दोनों होते हैं। इस डेटा का अधिकांश लगातार है और इसे डेटाबेस में संग्रहीत करने की आवश्यकता है। सक्रिय रिकॉर्ड सबसे अधिक स्पष्ट दृष्टिकोण का उपयोग करता है, जिससे डोमेन ऑब्जेक्ट में डेटा पहुंच तर्क डालता है। इस प्रकार सभी लोग जानते हैं कि डेटाबेस से और उनके डेटा को कैसे पढ़ और लिखना है।

...

जब उपयोग करने के लिए यह

सक्रिय रिकॉर्ड वह भी जटिल नहीं है, इस तरह के डोमेन तर्क के लिए एक अच्छा विकल्प , के रूप में बनाता है पढ़ता है, अद्यतन, और हटाता है। व्युत्पन्न और एक रिकॉर्ड पर आधारित सत्यापन इस संरचना में अच्छी तरह से काम करते हैं।

...

सक्रिय रिकॉर्ड सादगी के प्राथमिक लाभ दिया है। सक्रिय रिकॉर्ड्स का निर्माण करना आसान है, और वे समझने में आसान हैं। उनकी प्राथमिक समस्या यह है कि वे केवल सक्रिय रिकॉर्ड ऑब्जेक्ट्स से सीधे डेटाबेस टेबल पर मेल खाते हैं: isomorphic schema।

यदि आपके व्यवसाय तर्क जटिल है, आप जल्दी ही चाहता हूँ अपने वस्तु की प्रत्यक्ष रिश्ते, संग्रह, विरासत, और इसके आगे का उपयोग करें। ये सक्रिय रिकॉर्ड पर आसानी से मानचित्र नहीं करते हैं, और उन्हें जोड़कर टुकड़े टुकड़े बहुत गन्दा हो जाते हैं। यही कारण है कि आप डेटा मैपर का उपयोग करने के बजाय

1

यदि कुछ भी है, तो यह लेखन प्रश्नों को आसान बनाता है। मुझे लगता है कि सामान्य MySQL वाक्यविन्यास वाक्यविन्यास त्रुटियों (कोई गलती नहीं बल्कि मेरा खुद का) है और सीआई सक्रिय रिकॉर्ड वाक्यविन्यास के साथ यह शायद ही कभी मेरे साथ होता है।

सक्रिय रिकॉर्ड सीआई IMHO

संबंधित मुद्दे