संग्रहीत प्रक्रियाओं के बजाय ORM का उपयोग करने का सुझाव कैसे दें?


31

मैं एक कंपनी में काम करता हूं जो केवल सभी डेटा एक्सेस के लिए संग्रहीत प्रक्रियाओं का उपयोग करती है, जो हमारे स्थानीय डेटाबेस को सिंक में रखने के लिए बहुत कष्टप्रद है क्योंकि हर कमिट में हमें नए प्रॉपर रन करने होते हैं। मैंने अतीत में कुछ बुनियादी ओआरएम का उपयोग किया है और मुझे अनुभव काफी बेहतर और साफ-सुथरा लगता है। मैं विकास प्रबंधक और टीम के बाकी सदस्यों को सुझाव देना चाहता हूं कि हम भविष्य के विकास के लिए किसी तरह का एक ओआरएम का उपयोग करें (बाकी टीम केवल संग्रहीत प्रक्रियाओं से परिचित हैं और कभी भी कुछ और इस्तेमाल नहीं किया है)। "आर्किटेक्चर" के साथ .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 की ज्यूरी-हेराफेरी करें लेकिन पुराने अभी भी डेटासेट का उपयोग कर रहे हैं) और कम परेशानी यह याद रखने की है कि कौन सी प्रक्रिया स्क्रिप्ट को चलाया गया है और जिसे चलाने की आवश्यकता है आदि, लेकिन यह बात है, और मुझे नहीं पता कि एक तर्क कितना सम्मोहक होगा। रखरखाव एक और चिंता का विषय है, लेकिन मेरे अलावा कोई भी इसके बारे में चिंतित नहीं दिखता है।


8
लगता है जैसे आपको ओआरएम का उपयोग करने के लिए टीम को समझाने की तुलना में अधिक समस्याएं हैं। मुझे लगता है कि आपकी टीम को कुछ अच्छे विकास प्रथाओं (यानी डिजाइन पैटर्न, यूनिट परीक्षण) के बारे में पता नहीं है। ये अधिक महत्वपूर्ण मुद्दे हैं जिनसे आपको निपटने की आवश्यकता है।
बर्नार्ड

6
विडंबना यह है कि मुझे लगता है कि विकास के बारे में 5 साल में मैं केवल कुछ मुट्ठी भर लोगों / टीमों से मिला हूं जो डिजाइन पैटर्न और यूनिट परीक्षण जैसी चीजों के बारे में जानते थे; आमतौर पर मैं कंपनी का एकमात्र लड़का हूं जो उन चीजों के बारे में जानता है।
वेन मोलिना

3
@Wayne M: मैं पाता हूं कि थोड़ा परेशान हूं, लेकिन मैं इससे हैरान भी नहीं हूं।
बर्नार्ड

2
मैंने इसे बहुत पा लिया है ... निराश कर रहा हूं। यह अजीब है जब आप कुछ सुझाव देते हैं और "हेडलाइट्स में हिरण" प्राप्त करते हैं, जो यह दर्शाता है कि दूसरा व्यक्ति उस अस्पष्ट विचार को नहीं जानता है कि आप किस बारे में बात कर रहे हैं या कोई भी ऐसा करने पर विचार क्यों करेगा। मैंने अतीत में ऐसा बहुत बार किया है।
वेन मोलिना

2
मैं संग्रहित प्रक्रिया का बहुत बड़ा प्रशंसक हूं, इसलिए मेरी टिप्पणी पक्षपातपूर्ण है, लेकिन मैं पूरे आधार से पूरी तरह असहमत हूं। आपको ORM पसंद है और आप इसका उपयोग करना चाहते हैं जो ठीक है। हालांकि बाकी टीम स्टोर्ड प्रोक्स के साथ ठीक है। आप उन्हें क्यों पसंद करते हैं?
डार्क नाइट

जवाबों:


47

संग्रहीत प्रक्रियाएं खराब हैं, वे अक्सर धीमी होती हैं और साधारण क्लाइंट साइड कोड के रूप में लगभग कुशल होती हैं।

[स्पीडअप आमतौर पर क्लाइंट और संग्रहित प्रक्रिया इंटरफ़ेस को डिज़ाइन करने के तरीके के कारण होता है और जिस तरह से लेन-देन को संक्षिप्त रूप से लिखा जाता है, वह SQL के केंद्रित होते हैं।]

कोड डालने के लिए सबसे खराब स्थानों में से एक है संग्रहीत प्रक्रिया। यह आपके एप्लिकेशन को दो भाषाओं और प्लेटफार्मों में उन नियमों के अनुसार तोड़ देता है जो अक्सर यादृच्छिक होते हैं।

[यह सवाल लगभग -30 के स्कोर के लिए कम किया जाएगा क्योंकि कई, कई लोगों को लगता है कि संग्रहीत कार्यविधियों में जादुई शक्तियां हैं और उनके कारण होने वाली समस्याओं के बावजूद इसका उपयोग किया जाना चाहिए।]

सभी संग्रहीत कार्यविधि कोड को क्लाइंट में ले जाने से सभी के लिए चीजें बहुत आसान हो जाएंगी।

आपको अभी भी समय-समय पर स्कीमा और ओआरएम मॉडल को अपडेट करना होगा। हालाँकि, स्कीमा परिवर्तन ORM परिवर्तनों से पृथक होते हैं, जो अनुप्रयोगों और डेटाबेस स्कीमा के बीच कुछ स्वतंत्रता की अनुमति देते हैं।

जैसा कि आप उन्हें फिर से लिखना चाहते हैं, उन सभी संग्रहीत प्रक्रियाओं का परीक्षण, निर्धारण, रखरखाव, समझने और अनुकूलन करने में सक्षम होंगे। आपका ऐप उसी के बारे में चलेगा और बहुत कम नाजुक हो जाएगा क्योंकि अब आप दो अलग-अलग तकनीकों में नहीं टूट रहे हैं।

ORM का जादू नहीं है, और अच्छे डेटाबेस डिज़ाइन कौशल इसे बनाने के लिए नितांत आवश्यक हैं।

इसके अलावा, लेन-देन की सीमाओं के बारे में खराब सोच के कारण बहुत सारे ग्राहक एसक्यूएल के साथ कार्यक्रम धीमा हो सकता है। संग्रहीत प्रक्रियाओं के तेज़ होने का एक कारण यह है कि संग्रहीत कार्यविधियाँ बहुत लेनदेन के लिए बहुत सावधानी बरतती हैं।

ORM जादुई रूप से सावधान लेनदेन डिजाइन के लिए मजबूर नहीं करता है। लेन-देन की प्रक्रिया लिखने के दौरान लेन-देन डिजाइन अभी भी उतनी ही सावधानी से किया जाना चाहिए था।


19
+1 क्योंकि संग्रहित प्रक्रियाएं काम करने के लिए एक कुल दर्द हैं
गैरी रोवे

3
: '(मुझे संग्रहित प्रक्रियाओं से कोई समस्या नहीं है। यह मेरे लिए एक और अमूर्त परत है।
माइक वेलर

3
यदि हम SP बनाते हैं तो डेटाबेस इंजन इसे संकलित रूप में संग्रहीत करता है और यह निष्पादन पथ बनाता है ताकि यह यथासंभव तेज़ गति से निष्पादित हो। लेकिन ORM हर बार SQL भेजता है जिसे डेटाबेस इंजन द्वारा संकलित करने और चलाने की आवश्यकता होती है। मुझे लगता है कि संग्रहीत प्रक्रिया के बजाय ORM का उपयोग करना धीमा होगा।
DeveloperArnab

4
मजेदार। हमने ORM से संग्रहीत प्रक्रियाओं के कारण वापस स्विच किया .. SPEED। हमें प्रोग्रामिंग के लिए जितनी समय की आवश्यकता है, उतनी समय नहीं है, लेकिन एक ओआरएम को वस्तुओं को भौतिक बनाने, किसी वस्तु को देखने, विभिन्न ग्राहकों को अपडेट करने जैसी चीजों की आवश्यकता होती है। सपा जहां एक नरक बहुत तेजी से। एक उदाहरण: एक नए आधुनिक ORM की जरूरत के साथ DB से 30.000 ऑब्जेक्ट पढ़ना ... ओह अच्छी तरह से। 2 मिनट के बाद का समय समाप्त। संग्रहीत प्रक्रिया को कॉल करना और परिणाम प्राप्त करना - 2 सेकंड। हाँ - वहाँ कई चालें मौजूद हैं जैसे कि किसी डीबी से कॉलिंज को कम करने के लिए पेजिंग - लेकिन बड़ा अंतर अगर वे सिर्फ एक ORM का उपयोग किया जा सकता है या
Offler

2
@DeveloperArnab: यह 20 साल पहले सच हो सकता है, लेकिन आधुनिक DB इंजन बहुत परिष्कृत हैं और पहले से निष्पादित प्रश्नों को पहचान सकते हैं और निष्पादन योजनाओं का पुन: उपयोग कर सकते हैं, आजकल गति अंतर इतना मामूली है कि यह शायद ही एसपी के अतिरिक्त परेशानी का वारंट करता है।
whatsisname

20

संग्रहीत प्रक्रियाएं अच्छी हैं, वे तेज़ और बहुत कुशल हैं और आपके डेटा-संबंधित कोड को डालने के लिए आदर्श स्थान हैं। उस सभी कोड को क्लाइंट में ले जाने से क्लाइंट डेवलपर के रूप में आपके लिए चीजें थोड़ी आसान हो जाएंगी (थोड़ा, जैसा कि आपको अभी भी स्कीमा और ओआरएम मॉडल को अपडेट करना होगा जब उन्हें बदलना होगा), लेकिन आप उस सभी मौजूदा कोड को खो देंगे, और बना सकते हैं उन सभी sql कौशल के नुकसान को देखते हुए आपका ऐप धीमा और शायद अधिक नाजुक है।

मुझे आश्चर्य है कि अगर डीबीए वहां बैठे हैं, "ओह, हर कमिट, मुझे क्लाइंट को फिर से नीचे खींचना होगा, हमें सभी कोड को डीबी रूपों में स्थानांतरित करना चाहिए"।

आपके मामले में, आपको मौजूदा कस्टम ORM (यानी आपके मज़ाकिया वर्ग) को किसी अन्य को बिना किसी नुकसान के साथ बदलने के लिए सक्षम होना चाहिए, जिस तरह से आपके कोड के पीछे कोड लिखा है। आप एसपी को भी सबसे (सभी?) ओआरएम के रूप में रख सकते हैं। इसलिए, मैं उन "फू" कक्षाओं को ORM के साथ बदलने की सलाह दूंगा और वहां से जाऊंगा। मैं आपके एसपी को बदलने की सिफारिश नहीं करूंगा।

पुनश्च। ऐसा प्रतीत होता है कि कोड-पीछे की कक्षाओं में आपके पास बहुत सारे सामान्य कोड हैं, जो उन्हें अपने आप में एक डिज़ाइन पैटर्न बनाता है। आपको क्या लगता है कि एक डिजाइन पैटर्न पहले स्थान पर है! (ठीक है, यह सबसे अच्छा या एक अच्छा भी नहीं हो सकता है, लेकिन यह अभी भी एक डीपी है)

संपादित करें: और अब डैपर के साथ , हेवीवेट ओआरएम पर स्पोक से बचने का कोई कारण नहीं है।


3
+1, स्पष्ट पहला कदम एक ORM में जाना है और मौजूदा संग्रहीत कार्यविधियों के परिणामों को ऑब्जेक्ट में मैप करने के लिए उपयोग करना है। उस ds.Tables[0].Rows[0]["FooName"].ToString()बकवास से सभी छुटकारा पाएं । प्रबंधक संग्रहीत प्रक्रियाओं को प्यार करता है? वह उन्हें रखने के लिए मिलता है। लेकिन यह तर्क देने के लिए शारीरिक रूप से असंभव होगा कि सभी पुनरावृत्ति वाले बॉयलरप्लेट कोड को लिनेक्यू से एसक्यूएल द्वारा उत्पन्न किसी चीज में स्थानांतरित करना, एक बुरी बात थी।
कार्सन 63000

11
वैसे मैं विश्वास नहीं कर सकता कि आपकी पोस्ट में कितना "गलत" है। कोड को खींचने के बारे में डीबीए के साथ आपकी तुलना अनुचित और पूरी तरह से संवेदनहीन है। सबसे पहले, डेटाबेस एक सेवा है जो कहानी के अंत में डेटा को संग्रहीत और पुनर्प्राप्त करने के लिए है। जैसा कि नाम का अर्थ है लॉजिक बिजनेस लॉजिक लेयर में जाता है, जो एपीआई कोड का एक हिस्सा है। App अधिक नाजुक sprocs से दूर जा रहा है? क्या आप गंभीर हैं या सिर्फ ट्रोलिंग? टीडीडी स्पार्क में तर्क के साथ एक ऐप और मुझे बताएं कि कितना मजेदार है। इसके अलावा ORM को स्विच करने के लिए नहीं हैं। डेटाबेस हैं, क्योंकि वे सिर्फ एक सेवा हैं।
मट्टियो मोस्का

5
मैं वास्तव में यह नहीं समझ सकता कि कुछ लोग यह क्यों सोचते हैं कि डेटाबेस किसी प्रकार की पवित्र भूमि है जहाँ सब कुछ पवित्र है। इसके बारे में सोचें। जब कोई थर्ड पार्टी कंपनी आपको एक सेवा प्रदान करती है, तो क्या वे आपको अपने db तक सीधी पहुँच प्रदान करते हैं, या क्या वे इसे API के पीछे नकाब लगाते हैं? एक लोकप्रिय उदाहरण का उपयोग करने के लिए, कोई भी Google सेवा लें। आप, डेवलपर, उनके सार्वजनिक एपीआई से कनेक्ट करते हैं, आपको यह भी नहीं पता है कि इसके अंतर्गत कौन सा डेटाबेस है, या यदि कोई डेटाबेस है। यह है कि आप एक ठोस और डिकौप्‍ट सॉफ़्टवेयर कैसे डिज़ाइन करते हैं। डेटाबेस को सीधे अनुप्रयोगों द्वारा एक्सेस करने का मतलब नहीं है। उसके लिए मध्य स्तर हैं।
मट्टियो मोस्का

5
@Matteo मोस्का: यकीन है, लेकिन मिडिलवेयर डीबी तक कैसे पहुंचता है ... यह डीबी का ग्राहक है। "क्लाइंट" का अर्थ "GUI" या "डेस्कटॉप ऐप" नहीं है। अनुप्रयोग स्तरों में बहुत सारे ग्रे क्षेत्र हैं - क्या आप GUI में या सर्वर / व्यावसायिक तर्क में मान्यता रखते हैं? यह सर्वर में एक साफ डिजाइन होना चाहिए, लेकिन यह प्रदर्शन और उपयोगकर्ता की जवाबदेही के लिए वास्तव में खराब होगा। इसी तरह, आप अक्सर DB में कुछ तर्क देते हैं जब यह प्रदर्शन करता है और (इस मामले में) डेटा शुद्धता बेहतर होती है।
gbjbaanb

4
मुझे खेद है लेकिन मैं अभी भी असहमत हूं। जिस दिन आपको अपने आवेदन को एक अलग वातावरण में तैनात करना होगा, जहां आपके पास एक ही डीबी तकनीक नहीं है, आप खुद को ऐसी स्थिति में पाते हैं, जहां आपका ऐप नहीं चल सकता है क्योंकि आपके पास नए डेटाबेस पर उन सभी स्थान नहीं हैं। .. और यहां तक ​​कि अगर आप उन्हें (जो कुल दर्द है) फिर से बनाते हैं, तो वे अलग-अलग हो सकते हैं, क्योंकि एसक्यूएल बोलियों के अंतर के कारण, आदि तर्क और मान्यता के साथ एक केंद्रीकृत एपीआई, एक मानक (जैसे एसओएपी या रीस्ट) के माध्यम से उजागर होता है, यह हल करता है समस्या, और परीक्षणशीलता, संस्करण और स्थिरता जोड़ता है।
मट्टियो मोस्का

13

आप अपनी टीम को एक चरम (संग्रहीत प्रक्रियाओं और डेटासेट) से दूसरे (पूर्ण-पूर्ण ORM) तक ले जाने की कोशिश कर रहे हैं। मुझे लगता है कि आपके डेटा एक्सेस लेयर की कोड गुणवत्ता में सुधार करने के लिए लागू करने के बारे में अन्य, अधिक वृद्धिशील परिवर्तन आप कर सकते हैं, जिसे आपकी टीम स्वीकार करने के लिए अधिक इच्छुक हो सकती है।

आपके द्वारा पोस्ट किया गया अर्ध-बेक्ड सक्रिय-रिकॉर्ड कार्यान्वयन कोड विशेष रूप से ग्यारह नहीं है - मैं सुझाता हूं कि रिपॉजिटरी पैटर्न पर शोध करना आसान है जिसे समझना और कार्यान्वित करना आसान है, और .NET डेवलपर्स के साथ बहुत लोकप्रिय है। यह पैटर्न अक्सर ORM के साथ जुड़ा होता है, लेकिन सादे ADO.NET का उपयोग करके रिपॉजिटरी बनाना इतना आसान है।

DataSet के रूप में - yuck! यदि आप स्टेटिक (या यहां तक ​​कि डायनामिक) टाइप की गई वस्तुओं को वापस करते हैं, तो आपके क्लास लाइब्रेरीज़ के साथ काम करना बहुत आसान होगा। मेरा मानना ​​है कि यह चित्रण डेटासेट के बारे में मेरी राय को मुझसे बेहतर बताता है।

इसके अलावा, आप किसी ओआरएम पर कूदते हुए स्टोर किए गए प्रोक की खरीद को खोद सकते हैं - पैरामीटर किए गए SQL का उपयोग करने में कुछ भी गलत नहीं है। वास्तव में मैं निश्चित रूप से संग्रहीत खरीद का उपयोग करने पर इसका समर्थन करता हूं, जब तक कि आपके पास जटिल प्रक्रियाएं नहीं होती हैं जो सर्वर पर कई राउंड ट्रिप को बचाती हैं। जब मैं एक विरासत डेटाबेस खोलता हूं और सीआरयूडी प्रक्रियाओं की अंतहीन सूची देखता हूं तो मुझे भी इससे नफरत है।

मैं ORM के उपयोग को हतोत्साहित नहीं कर रहा हूं - मैं आमतौर पर उन परियोजनाओं पर उपयोग करता हूं जिन पर मैं काम करता हूं। हालाँकि, मैं देख सकता हूँ कि इस परियोजना में एक परिचय देने की कोशिश में बहुत घर्षण हो सकता है और आपकी टीम जो इसे सरलता से कह सकती है, ध्वनि की तरह उन्होंने 8 साल पहले नई चीजें सीखना बंद कर दिया। कहा जाता है कि मैं निश्चित रूप से "माइक्रो ओआरएम" की नई नस्ल पर एक नज़र डालूंगा जैसे कि डैपर (इस साइट को कम नहीं करने के लिए इस्तेमाल किया जाता है) और बड़े पैमाने पर , दोनों का उपयोग करने के लिए अविश्वसनीय रूप से आसान है और आपको एसक्यूएल के मुकाबले करीब रखना है। विशिष्ट ORM करता है, और जिसे आपकी टीम स्वीकार करने के लिए अधिक इच्छुक हो सकती है।


2
मुझे लगता है कि समस्या सिर्फ उस समय की है जब ऐप को लिखा गया था। .NET के लिए कोई वास्तविक ORM नोट नहीं था इसलिए इसे दूसरे तरीके से किया गया था (ASP.NET 1.1 तरीका), और किसी ने कभी भी ऐसा करने के लिए नहीं सोचा (या कुछ और) जब तक मैं कुछ महीने पहले शामिल हो गया।
वेन मोलिना

1
डैपर के लिए +1। मैंने इसे एक परियोजना पर उपयोग करना शुरू कर दिया है और इसे लागू करना और उपयोग करना बेहद आसान है। मैं पहले से ही एक बड़ा प्रशंसक हूं।
SLoret

4

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

भले ही, आप अभी भी संग्रहीत procs का उपयोग कर सुरुचिपूर्ण और साफ कोड लिख सकते हैं। मैं वर्तमान में सभी संगृहीत प्रक्रियाओं के साथ रिपॉजिटरी पैटर्न को लागू कर रहा हूं। मैं अपने शानदार विचार के लिए FluentAdo.net को देखने का सुझाव दूंगा जब डेटाट्रेडर से आपके व्यवसाय की वस्तुओं पर मैपिंग हो। मैंने उस विचार का एक टुकड़ा लिया, और इसे अपने घरेलू समाधान के लिए वापस कर दिया।


3

JFTR - मैं एक नीच PHP डेवलपर हूं, लेकिन यह मुख्य रूप से राजनीतिक मुद्दे की तरह लगता है।

"सड़ांध" के पैमाने को देखते हुए ऐप को आगे बढ़ाया, फिर - एक तरफ सर्वोत्तम प्रथाओं - इसे जड़ देने के लिए एक महत्वपूर्ण ओवरहेड होगा। ऐसा लगता है कि यह फिर से लिखना क्षेत्र पर सीमा है।

क्या आप इस बात की गारंटी दे सकते हैं कि आपके द्वारा सुझाया गया विकल्प व्यवसाय को लागत का औचित्य साबित करने के लिए लाभ देगा? मुझे संदेह है कि इस उद्यम का आरओआई व्यवसाय को बेचना मुश्किल हो सकता है। जब तक ऐप अस्थिर नहीं है, या आप वित्तीय संदर्भ में ओवरहाल की योग्यता साबित कर सकते हैं - यह मुश्किल साबित हो सकता है।

क्या ORM SPROCS का एकमात्र विकल्प है? एक पूर्ण विकसित ORM और वेनिला SQL के बीच कुछ डिज़ाइन पैटर्न हैं। शायद आप इन SPROCS को धीरे-धीरे DB से DBAL में लाकर प्रक्रिया शुरू कर सकते हैं। निश्चित रूप से इस बात का खतरा है कि यह समय के साथ एक होमब्रे ओआरएम में बढ़ेगा - लेकिन आपको उद्देश्य के करीब एक कदम मिला होगा।


2

हमने कुछ साल पहले एसपी से ओआरएम पर स्विच किया था।

एक मामले में हमें 80 टेबल अपडेट करने थे। पुराने अनुमान मॉडल में एंटलीब और एसपी के साथ इसके लिए 80 घंटे का अनुमान होगा। हमने इसे 10 में किया :)

इसने डेटा एक्सेस लेयर को विकसित करने में इस्तेमाल होने वाले समय में हमें 80% की कमी दी है।


1
और आप टेबल अपडेट को स्क्रिप्ट क्यों नहीं कर सकते?
डार्क नाइट

यह स्मृति में एक जटिल वस्तु ले रहा था और इसे रिपोर्टिंग के लिए एक रिलेशनल डेटाबेस बचाता था। हमने एक प्रोग्राम लिखा था जिसने टेबल संरचना बनाने के लिए ऑब्जेक्ट पर प्रतिबिंब बनाया था।
शिराज भाईजी

-1

यह मुझे अधिक लगता है कि अंतर्निहित मुद्दा यह है कि आपकी तैनाती ठीक से और स्वचालित रूप से काम नहीं कर रही है।

एक निरंतर निर्माण इंजन को स्थापित करना आसान हो सकता है जो जानता है कि प्रत्येक कमिट के बाद डेटाबेस को कैसे हेरफेर करना है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.