मुझे लगता है कि यह एक विवादास्पद मेटा-उत्तर हो सकता है, और मुझे पार्टी में थोड़ी देर हो गई है, लेकिन मुझे लगता है कि यहां इसका उल्लेख करना बहुत महत्वपूर्ण है, क्योंकि मुझे लगता है कि मुझे पता है कि आप कहां से आ रहे हैं।
डिजाइन पैटर्न का उपयोग करने के तरीके के साथ समस्या यह है कि जब उन्हें सिखाया जाता है, तो वे इस तरह से एक मामला पेश करते हैं:
आपके पास यह विशिष्ट परिदृश्य है। अपने कोड को इस तरह व्यवस्थित करें। यहाँ एक स्मार्ट-दिखने वाला है, लेकिन कुछ हद तक इसका उदाहरण है।
समस्या यह है कि जब आप वास्तविक इंजीनियरिंग करना शुरू करते हैं, तो चीजें इस कट-एंड-ड्राई नहीं होती हैं। आप जिस डिज़ाइन पैटर्न के बारे में पढ़ते हैं, वह उस समस्या के लिए बिल्कुल उपयुक्त नहीं है जिसे आप हल करने की कोशिश कर रहे हैं। यह उल्लेख करने के लिए नहीं कि आप जिन पुस्तकालयों का उपयोग कर रहे हैं, वे पाठ में बताई गई सभी चीजों का पूरी तरह से उल्लंघन कर रहे हैं, उन पैटर्नों को, प्रत्येक अपने विशेष तरीके से। और परिणामस्वरूप, आप जो कोड लिखते हैं वह "गलत लगता है" और आप इस तरह के प्रश्न पूछते हैं।
इसके अलावा, मैं आंद्रेई अलेक्जेंड्रेस्कु को उद्धृत करना चाहूंगा, जब सॉफ्टवेयर इंजीनियरिंग के बारे में बात कर रहा हूं, जो बताता है:
सॉफ्टवेयर इंजीनियरिंग, शायद किसी भी अन्य इंजीनियरिंग अनुशासन से अधिक, एक समृद्ध बहुलता प्रदर्शित करता है: आप एक ही काम को इतने सारे सही तरीकों से कर सकते हैं, और सही और गलत के बीच अनंत बारीकियां हैं।
शायद यह थोड़ा अतिशयोक्ति है, लेकिन मुझे लगता है कि यह पूरी तरह से एक अतिरिक्त कारण बताता है कि आप अपने कोड में कम आत्मविश्वास क्यों महसूस कर सकते हैं।
यह इस तरह से है कि माइक एक्टन की भविष्यद्वाणी की आवाज, इंसोम्नियाक में गेम इंजन लीड, मेरी आवाज में चिल्लाती है:
अपना डेटा पता है
वह आपके प्रोग्राम के इनपुट्स और वांछित आउटपुट के बारे में बात कर रहा है। और फिर यह पौराणिक मानव माह से फ्रेड ब्रूक्स मणि है:
मुझे अपनी फ़्लोचार्ट दिखाओ और अपनी टेबल छुपाओ, और मैं रहस्यमयी बना रहूँगा। मुझे अपनी टेबल दिखाओ, और मुझे आमतौर पर आपके फ्लोचार्ट की आवश्यकता नहीं होगी; वे स्पष्ट हो जाएंगे।
इसलिए अगर मैं आप थे, तो मैं अपने ठेठ इनपुट मामले के आधार पर अपनी समस्या के बारे में बताऊंगा, और क्या यह वांछित सही आउटपुट प्राप्त करता है। और इस तरह के प्रश्न पूछें:
- क्या मेरे प्रोग्राम से आउटपुट डेटा सही है?
- क्या यह मेरे सबसे सामान्य इनपुट केस के लिए कुशलतापूर्वक / जल्दी से निर्मित है?
- क्या मेरा कोड मेरे और मेरे साथियों दोनों के लिए स्थानीय स्तर पर काफी आसान है? यदि नहीं, तो क्या मैं इसे सरल बना सकता हूं?
जब आप ऐसा करते हैं, तो "अमूर्त या डिजाइन पैटर्न की कितनी परतों की आवश्यकता है" का सवाल जवाब देने में बहुत आसान हो जाता है। अमूर्त की कितनी परतों की आवश्यकता है? इन लक्ष्यों को प्राप्त करने के लिए जितना आवश्यक है, उतना नहीं। "डिजाइन पैटर्न के बारे में क्या? मैंने कोई उपयोग नहीं किया है!" ठीक है, अगर पैटर्न के प्रत्यक्ष आवेदन के बिना उपरोक्त लक्ष्यों को प्राप्त किया गया था, तो यह ठीक है। इसे काम करें, और अगली समस्या पर जाएं। अपने डेटा से प्रारंभ करें, कोड से नहीं।