मैं एक कंपनी में काम करता हूं जो केवल सभी डेटा एक्सेस के लिए संग्रहीत प्रक्रियाओं का उपयोग करती है, जो हमारे स्थानीय डेटाबेस को सिंक में रखने के लिए बहुत कष्टप्रद है क्योंकि हर कमिट में हमें नए प्रॉपर रन करने होते हैं। मैंने अतीत में कुछ बुनियादी ओआरएम का उपयोग किया है और मुझे अनुभव काफी बेहतर और साफ-सुथरा लगता है। मैं विकास प्रबंधक और टीम के बाकी सदस्यों को सुझाव देना चाहता हूं कि हम भविष्य के विकास के लिए किसी तरह का एक ओआरएम का उपयोग करें (बाकी टीम केवल संग्रहीत प्रक्रियाओं से परिचित हैं और कभी भी कुछ और इस्तेमाल नहीं किया है)। "आर्किटेक्चर" के साथ .NET 1.1 की तरह वर्तमान आर्किटेक्चर .NET 3.5 लिखा गया है, जो ActiveRecord के एक अजीब कार्यान्वयन का उपयोग करता है और अप्रकाशित डेटासेट लौटाता है, जो कोड-बैक फ़ाइलों में लूप किए जाते हैं - कक्षाएं कुछ इस तरह से काम करती हैं:
class Foo {
public bool LoadFoo() {
bool blnResult = false;
if (this.FooID == 0) {
throw new Exception("FooID must be set before calling this method.");
}
DataSet ds = // ... call to Sproc
if (ds.Tables[0].Rows.Count > 0) {
foo.FooName = ds.Tables[0].Rows[0]["FooName"].ToString();
// other properties set
blnResult = true;
}
return blnResult;
}
}
// Consumer
Foo foo = new Foo();
foo.FooID = 1234;
foo.LoadFoo();
// do stuff with foo...
किसी भी डिजाइन पैटर्न का कोई बहुत अधिक अनुप्रयोग नहीं है। कोई भी परीक्षण नहीं है (कोई और नहीं जानता कि यूनिट परीक्षण कैसे लिखना है, और परीक्षण मैन्युअल रूप से वेबसाइट को लोड करने और चारों ओर पोकिंग के माध्यम से किया जाता है)। हमारे डेटाबेस के माध्यम से देखते हुए: हमारे पास 199 टेबल, 13 विचार, 926 संग्रहीत प्रक्रियाएं और 93 फ़ंक्शन हैं। लगभग 30 या तो टेबल का उपयोग बैच की नौकरियों या बाहरी चीजों के लिए किया जाता है, शेष का उपयोग हमारे मुख्य अनुप्रयोग में किया जाता है।
क्या इस परिदृश्य में एक अलग दृष्टिकोण अपनाने के लायक भी है? मैं आगे बढ़ने के बारे में बात कर रहा हूं क्योंकि हमें "कोड काम करता है" के बाद से मौजूदा कोड को रीफ़्रैक्टर करने की अनुमति नहीं है, इसलिए हम ORM का उपयोग करने के लिए मौजूदा कक्षाओं को नहीं बदल सकते हैं, लेकिन मुझे नहीं पता कि हम इसके बजाय कितनी बार नए ब्रांड जोड़ते हैं वर्तमान मॉड्यूल को जोड़ने / ठीक करने के लिए इसलिए मुझे यकीन नहीं है कि अगर एक ओआरएम सही दृष्टिकोण है (संग्रहीत प्रक्रियाओं और डेटासेट में बहुत अधिक निवेश किया गया है)। यदि यह सही विकल्प है, तो मुझे एक का उपयोग करने के लिए मामला कैसे प्रस्तुत करना चाहिए? मेरे सिर के ऊपर केवल वही लाभ हैं जिनके बारे में मैं सोच सकता हूं कि क्लीनर कोड है (हालांकि यह नहीं हो सकता है, क्योंकि वर्तमान वास्तुकला 'एनएन' है ORMs को ध्यान में रखकर बनाया गया ताकि हम मूल रूप से भविष्य के मॉड्यूल्स पर ORMs की ज्यूरी-हेराफेरी करें लेकिन पुराने अभी भी डेटासेट का उपयोग कर रहे हैं) और कम परेशानी यह याद रखने की है कि कौन सी प्रक्रिया स्क्रिप्ट को चलाया गया है और जिसे चलाने की आवश्यकता है आदि, लेकिन यह बात है, और मुझे नहीं पता कि एक तर्क कितना सम्मोहक होगा। रखरखाव एक और चिंता का विषय है, लेकिन मेरे अलावा कोई भी इसके बारे में चिंतित नहीं दिखता है।