क्या एक अच्छे से डिज़ाइन किए गए डेटाबेस के साथ अच्छा कोड लिखने की कोई उम्मीद है?


18

यहाँ मेरी भविष्यवाणी है। मेरे द्वारा हाल ही में विरासत में प्राप्त कई कार्यक्रमों में से एक बैकएंड पर एक भयानक डेटाबेस के साथ बनाया गया है। इसके सम्मानित रचनाकारों ने स्पष्ट रूप से संबंधपरक अवधारणाओं की सराहना नहीं की। प्रत्येक ग्राहक के लिए एक तालिका, जिसे एक अद्वितीय ग्राहक आईडी के रूप में नामित किया गया है। अस्सी-तीन क्रिप्टो रूप से नामित फ़ील्ड। कोड सभी प्रक्रियात्मक है जिसमें दर्जनों संक्षिप्त इनलाइन SQL स्टेटमेंट हैं।

जैसा कि हमें एक महत्वपूर्ण सहायक एप्लिकेशन के साथ प्रदान नहीं किया गया था जो एक ही डेटाबेस से चलता है, मुझे इसे स्क्रैच से फिर से बनाने का काम सौंपा गया है। मैं एक अकेला डेवलपर हूं, जो मेरी प्राथमिक जिम्मेदारी भी नहीं है क्योंकि मेरा कम से कम आधा समय ऑपरेशन के सामान द्वारा लिया जाता है। अब से 30 दिनों के लिए एक अपरिहार्य समय सीमा निर्धारित है।

अपनी अनुभवहीनता के बावजूद, मुझे यकीन है कि मैं इस डेटाबेस को तैयार कर सकता था और मौजूदा एप्लिकेशन को वे की तुलना में बहुत बेहतर बना सकते थे, लेकिन मुझे नहीं लगता कि डेटाबेस को बदलना, मौजूदा एप्लिकेशन को समायोजित करना और मुझे यकीन है कि मेरे लिए यह यथार्थवादी है ' अतिरिक्त एप्लिकेशन को जल्दी से बनाने के लिए किसी भी चीज़ को तोड़ने की ज़रूरत नहीं है।

तो चलो मान लिया कि मैं भयानक डेटाबेस के साथ फंस गया हूं। इस तरह की खराब संरचना के साथ काम करने की आवश्यकता है, क्या मैं कुछ भी लिखूंगा जो इसके अनुरूप है बस तकनीकी ऋण के ढेर के ढेर में जोड़ें जब तक कुछ पूरी तरह से टूट जाता है या नई कार्यक्षमता की आवश्यकता होती है? मैं इस स्थिति से कैसे संपर्क कर सकता हूं और एक आशावादी कार्यात्मक अनुप्रयोग के अलावा इससे अच्छा कुछ प्राप्त कर सकता हूं?

संपादित करें: किसी की दिलचस्पी के मामले में, हमने इस भयानक डेटाबेस और उस पर चलने वाले एप्लिकेशन को समाप्त कर दिया। हमने अंततः दो अलग-अलग ठेकेदारों को सहायक एप्लिकेशन (मैं इसे स्थापित करने में शामिल नहीं किया था) के निर्माण को आउटसोर्स किया था, जो दोनों ने हमारे ऊपर गिरने से समाप्त कर दिया, कुछ भी पूरा नहीं किया। मैंने तीन दिन में एक फिक्स की भयावह, आंशिक रूप से कार्यात्मक हैक करने की कोशिश की, जो आज भी उपयोग में है।


2
जरा सोचिए कि आप एक पुस्तकालय के खिलाफ कैसे कोड करेंगे जहां विशेष मामला "2 + 2" वापस नहीं आया 4. यह आसान नहीं है।

8
इसलिए, जो मैं यह सब सुन रहा हूं वह यह है कि आपके पास दूसरी नौकरी खोजने के लिए 30 दिन हैं। careers.stackoverflow.com ;-)
स्टीवन ए लोव


@gnat: पास भी नहीं।
रॉबर्ट हार्वे

जवाबों:


27

आशा है, लेकिन यह एक कठिन लड़ाई है, खासकर अगर किसी को पता नहीं है कि डेटाबेस डिजाइन भयानक है। आप अमूर्त परतों के साथ नास्टनेस को दूर करने की कोशिश कर सकते हैं, लेकिन संभावना है कि यह लड़ाई के लायक नहीं होगा।

मेरी सलाह डेटाबेस पर पर्याप्त सार बनाने के लिए होगी कि आवेदन स्वयं स्वच्छ और ठीक से डिज़ाइन किया गया हो; इस तरह अगर आप कभी भी डेटाबेस को ठीक कर सकते हैं, तो आवेदन प्रभावित नहीं होगा क्योंकि यह परवाह नहीं करता है कि डेटाबेस कैसे डिज़ाइन किया गया था।

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


1
+1 मैंने मूल रूप से आपके जवाब में वही बात कही है जो पूरी तरह से पढ़ने से पहले आपको बताई जाती है लेकिन मुझे अपना उत्तर डिलीट करने का कोई तरीका नहीं दिखता क्योंकि आप उसी सामग्री को कवर करते हैं।
ओमिनस

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

3
@maple_shaft सहमत हैं, लेकिन ओपी का कहना है कि उन्हें बनाने के लिए कहा गया है, खरोंच से, एक नया अनुप्रयोग जो डेटाबेस के साथ बातचीत करेगा। इस तरह एक मामले में यह सही ढंग से नए आवेदन बनाने के लिए समझ में आता है।
वेन मोलिना

1
@maple_shaft, एप्लिकेशन का एकमात्र बकवास हिस्सा वह भाग होगा जो बकवास डेटाबेस के साथ इंटरैक्ट करता है। यह एन-टियर आर्किटेक्चर और एसओसी का बिंदु है।
स्टुपरयूजर

1
@maple_shaft लक्ष्य डेटाबेस को "ब्लैक बॉक्स" प्रकार में डालना होगा, और एप्लिकेशन को एक इंटरफ़ेस देना होगा जो अधिक आदर्श हो और जरूरी नहीं कि डेटाबेस डिजाइन का प्रतिनिधि हो।
माइकल डीन

10

एक इंटरफ़ेस परत बनाएं जो सभी DB सामान को संभालती है फिर उस के साथ इंटरफ़ेस करने के लिए अपना ऐप लिखें। इस घटना में कि डेटाबेस कभी भी "निश्चित" हो जाता है, आप बस अपने "इंटरफ़ेस" को प्रतिस्थापित / अपडेट करते हैं। इस अप्रोच ने मुझे एक खराब डेटाबेस या एक डेटाबेस से निपटने के लिए एक टन समय बचाया है जो अन्य अनुप्रयोगों को खिला रहा था और इसके साथ खिलवाड़ नहीं किया जा सकता था।


आप अपने स्वयं के उत्तरों को कैसे हटा सकते हैं या यह एक संभावना नहीं है?
ओमिनस

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

@Ominus: यह संभव होना चाहिए, लेकिन आप क्यों करना चाहेंगे? आप 3 upvotes मिल गया है!
FrustratedWithFormsDesigner 15

1
@ मार्जन: मॉडरेटर और कोई भी> 10K प्रतिनिधि के साथ।
जेरी कॉफिन

1
आप इस उत्तर को क्यों हटाना चाहेंगे? मुझे लगता है कि यह एक उत्कृष्ट समाधान है।
जिम जी।

6

आउच ... आपको एक बुरा सपना विरासत में मिला है, आपके पास अपने संगठन के लिए उपयोग करने योग्य बनाने के लिए 30 दिन हैं, और आपका आधा दिन ऑपरेशन कार्यों के साथ लिया जाता है?

मुझे यकीन है कि आप रिफ्लेक्टर कर सकते हैं लेकिन निश्चित रूप से उस समय में नहीं।

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

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


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

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

1
@ जॉन, यह अच्छा है कि वे रिफैक्टिंग की आवश्यकता को प्राप्त करते हैं। यह अच्छे दीर्घकालिक प्रबंधन का संकेत है और वास्तव में रिफैक्टिंग करने के लिए पहला कदम है।
maple_shaft

3
एक महान, यथार्थवादी जवाब के लिए +1। आपके पास एक महीना है, लेकिन वास्तव में केवल आधा महीना है क्योंकि आप संचालन पर आधा समय काम करते हैं। यह 11-15 दिनों पर निर्भर करता है कि आप सप्ताहांत पर क्या लेते हैं। मुझे यह कहने से नफरत है, लेकिन मैं मानता हूं कि आपका सबसे अच्छा शर्त यह है कि किसी चीज को एक साथ स्लैम करें जो कि asap काम करता है और इसे बाद में सुधारने या फिर से लिखने के लिए नोट्स बनाता है, खासकर जब से आपका प्रबंधन रीफैक्टरिंग के साथ जहाज पर है।
बॉब मर्फी

6

डेटाबेस को अन्य कोड की तरह ही रिफैक्ट किया जा सकता है। उस भाग को ठीक करें जो उस कोड से प्रभावित है जिसे आपको लिखने और लिखने के लिए परीक्षण करने की आवश्यकता है ताकि यह सुनिश्चित हो सके कि और कुछ नहीं टूटता है। एक बार में किसी भी अन्य रीफैक्टरिंग की तरह एक छोटा सा करें। डेटाबेस रीफैक्टरिंग पर एक अच्छी किताब है जो आपको गंदगी को साफ करने में मदद कर सकती है। http://www.amazon.com/Refactoring-Databases-Evolutionary-paperback-Addison-Wesley/dp/0321774515/ref=sr_1_1?ie=UTF8&qid=1307025831&sr=8-1

वहाँ दूसरों के रूप में अच्छी तरह से कर रहे हैं, लेकिन मैं व्यक्तिगत रूप से इस एक में तकनीकों के साथ पढ़ा और काम किया है।

और मत भूलो कि आप जिस तरह से डेटाबेस को क्वेरी करने की जरूरत है, उसे आप के लिए पुनर्गठन कर सकते हैं ताकि आप के लिए बुरा बदलाव काम कर सकें जो एक स्ट्रक्चुर में है जो क्वेरी के लिए आसान है।


यह सब अच्छी तरह से और अच्छा है, लेकिन मुझे इस बात का संदेह है कि अगर डेटाबेस डिज़ाइन गड़बड़ है, तो एप्लिकेशन कोड संभवतः बेकार भी है।
maple_shaft

@maple_shaft, हालांकि यह मेरा अनुभव हो सकता है कि अच्छे अनुप्रयोग डेवलपर्स भी भयानक डेटाबेस डिजाइन करते हैं। किसी भी तरह से केवल क्रमिक रिफैक्टरिंग गड़बड़ को ठीक कर देगा, वह सिर्फ इसे एकमुश्त प्रतिस्थापित नहीं कर सकता भले ही मुझे यकीन है कि वह पसंद कर रहा है।
HLGEM

+1 @HLGEM, ये अच्छे अंक हैं। यदि एप्लिकेशन कोड अच्छी तरह से डिज़ाइन किया गया है तो आपकी सलाह ध्वनि है। भागों में परिक्रमा करना शायद सबसे अच्छा तरीका है, लेकिन अपने पूरे करियर में मैंने कभी भी उस काम को सफलतापूर्वक नहीं देखा। यह हालांकि खराब परियोजना प्रबंधन के कारण हो सकता है, इसलिए नहीं कि यह एक निराधार विचार है।
maple_shaft

5

अपने हिरन के लिए सबसे बड़ा धमाका करने के लिए, "सापेक्षता" में से कुछ को पुनर्स्थापित करने और अधिक सार्थक स्तंभ नाम प्रदान करने के लिए अप करने योग्य विचार बनाएं।


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

4

एक संभावना एक दूसरा डेटाबेस स्थापित करने की होगी जो संरचित (कम से कम करीब) कैसे आप इसे पसंद करेंगे, और दो डेटाबेसों के बीच प्रतिकृति स्थापित करेंगे। फिर आप नए डेटाबेस के खिलाफ अपना कोड लिख सकते हैं और अभी भी मौजूदा डेटाबेस (और एप्लिकेशन) को बरकरार रख सकते हैं, जब आपके पास अधिक समय हो।

सच में, यह अभी भी बहुत सारे प्रश्न के लिए खुला है कि क्या आप ऐसा कर सकते हैं ~ 15 दिनों के काम में। विशेष रूप से, यह इस बात पर निर्भर करने की संभावना है कि क्या आपको दो-तरफा प्रतिकृति की आवश्यकता है (यानी, आपका नया एप्लिकेशन वास्तव में डेटा को अपडेट करेगा) या केवल एक ही तरीका (आपका नया एप्लिकेशन केवल लोगों को डेटा देखने देता है)। बाद का मामला (बेशक) नाटकीय रूप से निपटने के लिए आसान है।

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

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


+1, यह एक अच्छा विचार भी रूप में लंबे समय हो सकता है के रूप में सभी आवेदन डेटा का उपयोग कोड को ठीक से अन्य परतों से अलग है, और उस डेटा का उपयोग कोड के साथ नया स्कीमा काम करने के लिए पुनर्संशोधित किया जा सकता है
maple_shaft
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.