मेरा एक दोस्त एक छोटी कंपनी के लिए एक प्रोजेक्ट पर काम कर रहा है, जिसे हर डेवलपर नफरत करता है: वह जितनी जल्दी हो सके जारी करने के लिए दबाव डाला जाता है, वह केवल एक है जो तकनीकी ऋण की परवाह करता है, ग्राहक के पास कोई तकनीकी पृष्ठभूमि नहीं है, आदि।
उन्होंने मुझे एक कहानी सुनाई जिसने मुझे इस तरह की परियोजनाओं में डिजाइन पैटर्न की उपयुक्तता के बारे में सोचा। यहाँ कहानी है।
हमें वेबसाइट पर विभिन्न स्थानों पर उत्पादों को प्रदर्शित करना था। उदाहरण के लिए, सामग्री प्रबंधक उत्पादों को देख सकते हैं, लेकिन अंतिम उपयोगकर्ताओं या भागीदारों को एपीआई के माध्यम से भी।
कभी-कभी, जानकारी उत्पादों से गायब थी: उदाहरण के लिए, जब उत्पाद बनाया गया था, तो उनमें से एक गुच्छा की कोई कीमत नहीं थी, लेकिन कीमत अभी भी निर्दिष्ट की गई थी। कुछ में विवरण नहीं था (विवरण संशोधन इतिहास, स्थानीयकृत सामग्री, आदि के साथ एक जटिल वस्तु होने के नाते)। कुछ में शिपमेंट की जानकारी का अभाव था।
डिज़ाइन पैटर्न के बारे में मेरे हाल के रीडिंग से प्रेरित, मैंने सोचा कि यह जादुई नल ऑब्जेक्ट पैटर्न का उपयोग करने का एक शानदार अवसर था । तो मैंने इसे किया, और सब कुछ चिकनी और साफ था। एक को केवल
product.Price.ToString("c")
मूल्य प्रदर्शित करने के लिए कॉल करना था , याproduct.Description.Current
विवरण दिखाना था; कोई सशर्त सामान की आवश्यकता नहीं है। एक दिन पहले तक, हितधारक नेnull
JSON में होने पर, एपीआई में इसे अलग तरीके से प्रदर्शित करने के लिए कहा । और "मूल्य अनिर्दिष्ट [बदलें]" दिखाकर सामग्री प्रबंधकों के लिए भी अलग तरह से। और मुझे अपने प्रिय नल ऑब्जेक्ट पैटर्न को मारना पड़ा, क्योंकि अब इसकी कोई आवश्यकता नहीं थी।उसी तरह, मुझे कुछ अमूर्त कारखानों और कुछ बिल्डरों को हटाना पड़ा, मैंने अपने खूबसूरत मुखौटा पैटर्न को सीधे और बदसूरत कॉल द्वारा प्रतिस्थापित करना समाप्त कर दिया, क्योंकि अंतर्निहित इंटरफ़ेस तीन महीने के लिए प्रति दिन दो बार बदल गया, और यहां तक कि सिंगलटन ने उसे छोड़ दिया जब आवश्यकताओं ने बताया कि संबंधित वस्तु को संदर्भ के आधार पर अलग होना चाहिए।
तीन सप्ताह से अधिक के काम में डिज़ाइन पैटर्न को जोड़ना शामिल था, फिर उन्हें एक महीने बाद अलग कर दिया, और मेरा कोड अंत में स्पेगेटी बन गया, जिसमें किसी को भी अपने आप को बनाए रखना असंभव था। क्या पहले उन पैटर्न का उपयोग कभी नहीं करना बेहतर होगा?
वास्तव में, मुझे खुद को उन प्रकार की परियोजनाओं पर काम करना पड़ा जहां आवश्यकताओं में लगातार बदलाव हो रहे हैं, और उन लोगों द्वारा तय किए जाते हैं जो वास्तव में उत्पाद के सामंजस्य या सुसंगतता को ध्यान में नहीं रखते हैं। इस संदर्भ में, इससे कोई फर्क नहीं पड़ता है कि आप कितने चुस्त हैं, आप किसी समस्या के सुरुचिपूर्ण समाधान के साथ आएंगे, और जब आप अंततः इसे लागू करते हैं, तो आप सीखते हैं कि आवश्यकताएं इतनी तेजी से बदल गईं, कि आपका सुरुचिपूर्ण समाधान फिट नहीं होता है अब किसी भी।
इस मामले में क्या समाधान होगा?
किसी भी डिज़ाइन पैटर्न का उपयोग नहीं करना, सोचना बंद करना और सीधे कोड लिखना?
एक अनुभव करना दिलचस्प होगा जहां एक टीम सीधे कोड लिख रही है, जबकि दूसरा व्यक्ति टाइप करने से पहले दो बार सोच रहा है, कुछ दिन बाद मूल डिजाइन को फेंकने का जोखिम उठा रहा है: कौन जानता है, शायद दोनों टीमों के पास होगा वही तकनीकी ऋण। इस तरह के डेटा के अभाव में, मैं केवल इस बात पर जोर दूंगा कि 20 महीने के प्रोजेक्ट पर काम करते समय बिना पूर्व विचार के कोड लिखना सही नहीं लगता ।
उस डिज़ाइन पैटर्न को रखें जो अब किसी भी मायने नहीं रखता है, और नव निर्मित स्थिति के लिए और अधिक पैटर्न जोड़ने की कोशिश करता है?
यह न तो सही प्रतीत होता है। कोड की समझ को सरल बनाने के लिए पैटर्न का उपयोग किया जाता है; बहुत अधिक पैटर्न डालें, और कोड गड़बड़ हो जाएगा।
एक नई डिजाइन के बारे में सोचना शुरू करें जो नई आवश्यकताओं को शामिल करती है, फिर धीरे-धीरे पुराने डिजाइन को नए में फिर से शामिल करें?
एक सिद्धांतकार और जो चपलता का पक्षधर है, मैं पूरी तरह से इसमें हूँ। व्यवहार में, जब आप जानते हैं कि आपको हर हफ्ते व्हाइटबोर्ड पर वापस जाना होगा और पिछले डिज़ाइन के बड़े हिस्से को फिर से बनाना होगा और ग्राहक के पास आपके लिए पर्याप्त धनराशि नहीं होगी, और न ही इंतजार करने के लिए पर्याप्त समय। , यह शायद काम नहीं करेगा।
तो, कोई सुझाव?