मेरा लंबा और देर से जवाब, पूरा भी नहीं, लेकिन एक अच्छी व्याख्या क्यों मुझे इस पैटर्न, राय और यहां तक कि कुछ भावनाओं से नफरत है:
1) लघु संस्करण: सक्रिय रिकॉर्ड डेटाबेस और एप्लिकेशन कोड के बीच " मजबूत बंधन " की " पतली परत " बनाता है । जो कोई तार्किक नहीं, कोई समस्या नहीं, कोई समस्या नहीं। IMHO यह प्रोग्रामर के लिए कुछ सिंटैक्टिक शुगर को छोड़कर कोई वैल्यू प्रदान नहीं करता है (जो तब कुछ डेटा तक पहुंचने के लिए "ऑब्जेक्ट सिंटैक्स" का उपयोग कर सकता है, जो एक रिलेशनल डेटाबेस में मौजूद है)। प्रोग्रामर के लिए कुछ आराम पैदा करने का प्रयास (IMHO ...) बेहतर स्तर के डेटाबेस एक्सेस टूल में निवेश किया जाना चाहिए, जैसे कि सरल, आसान, सादे के कुछ रूपांतरhash_map get_record( string id_value, string table_name, string id_column_name="id" )
और इसी तरह के तरीकों के (निश्चित रूप से, अवधारणाएं और लालित्य बहुत भिन्न होते हैं) भाषा का इस्तेमाल किया)।
2) लंबा संस्करण: किसी भी डेटाबेस-संचालित परियोजनाओं में जहां मुझे चीजों का "वैचारिक नियंत्रण" था, मैंने एआर से परहेज किया, और यह अच्छा था। मैं आमतौर पर एक स्तरित वास्तुकला का निर्माण करता हूं (आप जितनी जल्दी या बाद में अपने सॉफ़्टवेयर को परतों में विभाजित करते हैं, कम से कम मध्यम-से-बड़े-बड़े आकार के प्रोजेक्ट में करते हैं:
A1) डेटाबेस ही, टेबल, संबंध, यहां तक कि कुछ तर्क अगर DBMS इसे अनुमति देता है (MySQL भी अब बड़ा हो गया है)
A2) बहुत बार, एक डेटा स्टोर की तुलना में अधिक है: फ़ाइल सिस्टम (डेटाबेस में ब्लॉब्स हमेशा एक अच्छा निर्णय नहीं होता है ...), विरासत प्रणाली (खुद को "कैसे" उन्हें एक्सेस किया जाएगा, कई किस्में संभव हैं .. लेकिन thats बात नहीं ...)
बी) डेटाबेस एक्सेस लेयर (इस स्तर पर, टूल मेथड्स, डेटाबेस में डेटा को आसानी से एक्सेस करने के लिए हेल्पर्स का बहुत स्वागत है, लेकिन AR कुछ सिंटैक्टिक शुगर को छोड़कर यहां कोई मूल्य प्रदान नहीं करता है)
सी) एप्लिकेशन ऑब्जेक्ट्स लेयर: "एप्लिकेशन ऑब्जेक्ट्स" कभी-कभी डेटाबेस में एक टेबल की सरल पंक्तियां होती हैं, लेकिन ज्यादातर बार वे कंपाउंड ऑब्जेक्ट्स होते हैं , और कुछ उच्च तर्क संलग्न होते हैं, इसलिए इस स्तर पर एआर ऑब्जेक्ट्स में समय का निवेश करना केवल स्पष्ट रूप से बेकार है , कीमती कोडर समय की बर्बादी, क्योंकि "वास्तविक मूल्य", उन वस्तुओं के "उच्च तर्क" को एआर वस्तुओं के शीर्ष पर लागू करने की आवश्यकता है, वैसे भी - एआर के साथ और बिना! और, उदाहरण के लिए, आप "लॉग एंट्री ऑब्जेक्ट्स" का अमूर्त उपयोग क्यों करना चाहेंगे? ऐप लॉजिक कोड उन्हें लिखते हैं, लेकिन क्या उन्हें अपडेट करने या हटाने की क्षमता होनी चाहिए? मूर्खतापूर्ण लगता है, और App::Log("I am a log message")
कुछ परिमाण की तुलना में उपयोग करना आसान हैle=new LogEntry(); le.time=now(); le.text="I am a log message"; le.Insert();
। और उदाहरण के लिए: आपके आवेदन में लॉग दृश्य में "लॉग एंट्री ऑब्जेक्ट" का उपयोग करना 100, 1000 या 10000 लॉग लाइनों के लिए काम करेगा, लेकिन जितनी जल्दी या बाद में आपको अनुकूलन करना होगा - और मैं ज्यादातर मामलों में शर्त लगाता हूं, आप बस अपने ऐप लॉजिक में उस छोटे से सुंदर SQL सेलेक्ट स्टेटमेंट का उपयोग करें (जो AR विचार को पूरी तरह से तोड़ देता है ..), कठोर स्टेटमेंट में उस छोटे स्टेटमेंट को रैप करने के बजाय बहुत सारे कोड कोड के साथ AR आइडिया फ्रेम तय करते हैं और उसे छिपाते हैं। लिखने और / या AR कोड बनाने के साथ आपके द्वारा व्यर्थ किए गए समय को लॉग-प्रविष्टियों की सूची पढ़ने के लिए बहुत अधिक चतुर इंटरफ़ेस में निवेश किया जा सकता था (कई, कई तरीके, आकाश की सीमा है)।उनके आवेदन तर्क को महसूस करने के लिए जो कि उपयुक्त एप्लिकेशन को फिट करते हैं, और न कि मूर्खतापूर्ण तरीके से फिर से लागू करने के लिए, वह पहली नजर में अच्छा लगता है!
डी) एप्लिकेशन लॉजिक - ऑब्जेक्ट्स को इंटरैक्ट करने और बनाने, लॉजिक एंड लिस्टिंग (!) ऑफ एप्लिकेशन लॉजिक ऑब्जेक्ट्स (NO) के लॉजिक को लागू करता है, उन कार्यों को शायद ही कभी लॉजिक लॉजिक ऑब्जेक्ट्स में एंकर किया जाना चाहिए: क्या आपके डेस्क पर पेपर की शीट बताती है आप अपने कार्यालय में अन्य सभी शीट्स के नाम और स्थान रखते हैं। वस्तुओं को सूचीबद्ध करने के लिए "स्थिर" तरीकों को भूल जाते हैं, जो मूर्खतापूर्ण है, मानव के सोचने के तरीके को खराब करने के लिए बनाया गया एक बुरा समझौता [कुछ-नहीं-सभी-एआर-फ्रेमवर्क-जैसे -] एआर सोच)
ई) उपयोगकर्ता इंटरफ़ेस - ठीक है, जो मैं निम्नलिखित पंक्तियों में लिखूंगा, बहुत, बहुत व्यक्तिपरक है, लेकिन मेरे अनुभव में, एआर पर निर्मित परियोजनाओं ने अक्सर एक आवेदन के यूआई भाग की उपेक्षा की - सृजन अस्पष्ट अबेकशन पर समय बर्बाद किया गया । अंत में इस तरह के अनुप्रयोगों ने कोडर्स का बहुत समय बर्बाद किया और कोडर्स के लिए अंदर और बाहर तकनीक-झुकाव वाले अनुप्रयोगों की तरह महसूस किया। कोडर्स अच्छा महसूस करते हैं (कठिन काम आखिरकार, सब कुछ खत्म हो गया और सही हो गया, कागज पर अवधारणा के अनुसार ...), और ग्राहकों को "बस यह सीखना है कि इसे उस तरह का होना चाहिए", क्योंकि "पेशेवर"। ठीक है, माफ करना, मैं पछतावा ;-)
खैर, माना जाता है कि यह सब व्यक्तिपरक है, लेकिन इसका मेरा अनुभव (रूबी ऑन रेल्स को बाहर रखा गया है, यह अलग हो सकता है, और मुझे उस दृष्टिकोण के साथ शून्य व्यावहारिक अनुभव है)।
भुगतान की गई परियोजनाओं में, मैंने अक्सर उच्च स्तर के एप्लिकेशन लॉजिक के लिए बिल्डिंग ब्लॉक के रूप में कुछ "सक्रिय रिकॉर्ड" ऑब्जेक्ट बनाने के साथ शुरू करने की मांग सुनी। मेरे अनुभव में, यह विशिष्ट रूप से अक्सरकुछ इस तरह का बहाना था कि ग्राहक (ज्यादातर मामलों में एक सॉफ्टवेयर देव कंपनी) के पास एक अच्छी अवधारणा नहीं थी, एक बड़ा विचार, उत्पाद का अंत क्या होना चाहिए, इसका अवलोकन। वे ग्राहक कठोर फ़्रेम में सोचते हैं ("परियोजना में दस साल पहले यह अच्छी तरह से काम किया था .."), वे संस्थाओं को बाहर कर सकते हैं, वे संस्थाओं के संबंधों को परिभाषित कर सकते हैं, वे डेटा संबंधों को तोड़ सकते हैं और बुनियादी अनुप्रयोग तर्क को परिभाषित कर सकते हैं, लेकिन फिर वे रुक जाते हैं और इसे आप को सौंप दें, और सोचें कि आप सभी की जरूरत है ... वे अक्सर आवेदन तर्क, उपयोगकर्ता इंटरफ़ेस, प्रयोज्य और इतने पर की एक पूरी अवधारणा का अभाव है ... वे बड़े दृश्य का अभाव है और वे प्यार के लिए अभाव है विवरण, और वे चाहते हैं कि आप उस एआर तरीके का अनुसरण करें, क्योंकि .. ठीक है, क्यों, इस परियोजना में वर्षों पहले काम किया था, यह लोगों को व्यस्त और चुप रखता है? मुझे नहीं पता। लेकिन "विवरण" पुरुषों को लड़कों से अलग करें, या मूल विज्ञापन का नारा कैसा था? ;-)
कई सालों (दस साल के सक्रिय विकास के अनुभव) के बाद, जब भी कोई ग्राहक "सक्रिय रिकॉर्ड पैटर्न" का उल्लेख करता है, तो मेरा अलार्म बजता है। मैंने उन्हें उस आवश्यक वैचारिक चरण में वापस लाने की कोशिश करना सीखा , उन्हें दो बार सोचने की कोशिश करें, उन्हें अपनी वैचारिक कमजोरियों को दिखाने की कोशिश करें या यदि वे निर्विवाद हैं (तो अंत में, आप जानते हैं, एक ग्राहक जो अभी तक नहीं है पता है कि यह क्या चाहता है, शायद यह भी जानता है कि यह जानता है, लेकिन मेरे लिए मुफ्त में अवधारणा काम को करने की कोशिश नहीं करता है, मुझे कई कीमती घंटे, दिन, सप्ताह और मेरे समय का खर्च आता है, लाइव बहुत छोटा है ...)।
तो, अंत में: इस कारण से मैं उस मूर्खतापूर्ण "सक्रिय रिकॉर्ड पैटर्न" से नफरत करता हूं, और जब भी संभव हो मैं इसे करूंगा और इससे बचूंगा।
संपादित करें : मैं इसे नो-पैटर्न भी कहूंगा। यह किसी भी समस्या का समाधान नहीं करता है (पैटर्न सिंटैक्टिक चीनी बनाने के लिए नहीं हैं)। यह कई समस्याएं पैदा करता है: इसकी सभी समस्याओं की जड़ (यहां कई उत्तरों में उल्लिखित ..) है, कि यह सिर्फ पुराने पुराने अच्छी तरह से विकसित और शक्तिशाली SQL को एक इंटरफ़ेस के पीछे छुपाता है जो पैटर्न परिभाषा द्वारा बेहद सीमित है।
यह पैटर्न सिंटैक्टिक शुगर के साथ लचीलेपन को बदल देता है!
इसके बारे में सोचें, AR आपके लिए किस समस्या का समाधान करता है?