मैं उत्सुक हूं कि डेटा एक्सेस / व्यावसायिक वस्तुओं के लिए ActiveRecord पैटर्न का उपयोग करने में क्या कमियां हैं। केवल एक ही जो मैं अपने सिर के ऊपर से सोच सकता हूं वह यह है कि यह सिंगल रिस्पॉन्सिबिलिटी सिद्धांत का उल्लंघन करता है, लेकिन एआर पैटर्न पर्याप्त है कि यह कारण अकेले "अच्छा पर्याप्त" प्रतीत नहीं होता है इसका उपयोग न करने का औचित्य साबित करने के लिए (निश्चित रूप से मेरे दृश्य को तिरछा किया जा सकता है क्योंकि अक्सर मैं किसी भी कोड के साथ काम नहीं करता हूं जो किसी भी ठोस सिद्धांतों का अनुसरण करता है)।
व्यक्तिगत रूप से मैं ActiveRecord का प्रशंसक नहीं हूं (रेल एप्लिकेशन पर एक रूबी लिखने के अपवाद के साथ, जहां एआर "प्राकृतिक" लगता है) क्योंकि ऐसा लगता है कि वर्ग बहुत अधिक कर रहा है, और डेटा एक्सेस केवल कक्षा तक नहीं होना चाहिए से निपटने। मैं व्यावसायिक वस्तुओं को लौटाने वाली रिपॉजिटरी का उपयोग करना पसंद करता हूं। अधिकांश कोड मैं ActiveRecord की भिन्नता का उपयोग करने के लिए काम करता है, के रूप में (मुझे नहीं पता कि विधि एक बूलियन क्यों है):
public class Foo
{
// properties...
public Foo(int fooID)
{
this.fooID = fooID;
}
public bool Load()
{
// DB stuff here...
// map DataReader to properties...
bool returnCode = false;
if (dr.HasRows)
returnCode = true;
return returnCode;
}
}
या कभी-कभी public static Foo FindFooByID(int fooID)
खोजकर्ताओं के लिए एक तरीका होने का अधिक "पारंपरिक" तरीका और public void Save()
बचत / अद्यतन करने के लिए कुछ की तर्ज पर ।
मुझे लगता है कि ActiveRecord आम तौर पर लागू करने और उपयोग करने के लिए बहुत सरल है, लेकिन यह जटिल अनुप्रयोगों के लिए बहुत आसान लगता है और आप एक रिपॉजिटरी में अपने डेटा एक्सेस लॉजिक को एन्कैप करके और अधिक मजबूत आर्किटेक्चर रख सकते हैं (इसका उल्लेख करने के लिए स्वैप करना आसान नहीं है) डेटा एक्सेस की रणनीतियाँ जैसे कि शायद आप Stored Procs + DataSets का उपयोग करते हैं और LINQ या कुछ पर स्विच करना चाहते हैं)
तो इस पैटर्न में और क्या कमियां हैं, जो यह तय करते समय विचार किया जाना चाहिए कि क्या ActiveRecord नौकरी के लिए सबसे अच्छा उम्मीदवार है?