2009-05-23 6 views
12

यदि मेरे पास सीमित समय है, लेकिन मैं कुछ डिज़ाइन पैटर्न सीखना शुरू करना चाहता हूं, तो मुझे पहले किसको सीखना चाहिए?यदि मेरे पास कुछ डिज़ाइन पैटर्न सीखने के लिए सीमित समय है, तो मुझे कौन से सीखना चाहिए?

उत्तर

19

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

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

+2

प्लस प्लस ऑन: "मैं सीखने पर ध्यान केंद्रित करूंगा कि एक विशेष पैटर्न को कैसे कार्यान्वित करना सीखने पर ध्यान केंद्रित करने के बजाय विभिन्न स्थितियों में कौन से पैटर्न उपयोगी हैं।" डिजाइन पैटर्न के साथ सबसे बड़ी समस्या यह है कि मूर्ख उन्हें अनुपयुक्त रूप से उपयोग करते हैं, क्योंकि वे पुस्तक पढ़ते हैं, और विश्वास करते हैं कि पुस्तक कहती है कि यह "सही" है जब वास्तव में यह ऐसी कोई बात नहीं कहता है ... जीओएफ स्पष्ट रूप से "उपकरण का एक बॉक्स" है। यह एक वर्णनात्मक मेटा-रेसिपी नहीं है। आपके उत्तर के दूसरे पैराग्राफ के लिए – corlettk

+1

+1। सामान्य समस्याओं के सामान्य समाधानों का वर्णन करने के लिए एक शब्दावली के रूप में डिजाइन पैटर्न को देखना कहीं अधिक उपयोगी है। यह पूछने के लिए कि कौन से डिज़ाइन पैटर्न पहले सीखना है, यह पूछना है कि डॉक्टर बनने के लिए आपको पहले कौन से मेडिकल शब्दों को याद रखना चाहिए। –

0

Singleton कई स्थानों पर बहुत भारी उपयोग किया जाता है। Adapter पैटर्न का भी अक्सर उपयोग किया जाता है। उन दोनों में सबसे अधिक उपयोग किया जाता है, और अपेक्षाकृत सरल हैं; उन्हें समझना पैटर्न को समझने में सहायक हो सकता है, और आपके विकास के लिए उपयोगी हो सकता है।

+2

सिंगलटन मूल रूप से बहिष्कृत किया जाता है, मुख्य रूप से क्योंकि सिंगलटन को सिंगलटन के बिना परीक्षण नहीं किया जा सकता है। उदाहरण: आप उस डैंक डीबी.कॉन() विधि को छोड़कर स्टब्स का उपयोग कर डेटाबेस के साथ एक डीएओ का परीक्षण कर सकते हैं। लेकिन हां, आप इसे मौजूदा कोड में बहुत कुछ देखेंगे, और यह अभी भी आमतौर पर उपयोग किया जाता है। ConnectionFactory.getInstance() प्रत्येक बार एक ही कनेक्शन को वापस ला सकता है, बिना किसी प्रत्यारोपण में लॉक किए। – corlettk

4

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

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

7

उनके सारांश, this summary for example का सारांश क्यों न पढ़ें, और देखें कि कुछ ऐसा लगता है कि वे पर उपयोगी हो सकते हैं, और आगे की जांच के लायक हैं।

2

सार फैक्टरी। निर्भरता इंजेक्शन (डीआई) में प्रयुक्त।
यदि आप इसे समझते हैं, तो आप जानते हैं कि DI मूल रूप से कैसे काम करता है, और फिर आप जानते हैं कि नियंत्रण में उलटा क्या है।

6

डिज़ाइन पैटर्न ऐसे विषय नहीं हैं जिन्हें आप जल्दी से पढ़ना और सीखना शुरू कर देते हैं। आपको कई अभ्यास करना होगा और फिर वास्तविक परिदृश्यों में जो आपने सीखा है उसे लागू करें। यदि आपका समय वास्तव में सीमित है तो आप अपना समय बर्बाद कर सकते हैं। मैं Head First Design Patterns पुस्तक का सुझाव देता हूं, जो उत्कृष्ट है।

लेकिन ओओ का आपका ज्ञान शुरू करने के लिए काफी उच्च मानक होना चाहिए।

+0

+1 –

1

"कमांड" पैटर्न सार फैक्ट्री की तुलना में थोड़ा अधिक जटिल है, लेकिन आमतौर पर इसका उपयोग किया जाता है, और शक्तिशाली।

एक और पैटर्न जिसे मैंने कभी भी उपयोग करने का अच्छा मौका नहीं दिया है वह "समग्र" पैटर्न है। यह आपको ओओ तकनीकों के लिए अच्छा प्रदर्शन देगा, और यदि आप कभी भी इसकी आवश्यकता पूरी करते हैं तो उपयोगी साबित हो सकता है।

6

आपका प्रश्न पूछने जैसा है, "मैं सी # सीखना चाहता हूं लेकिन केवल कुछ कीवर्ड सीखने का समय है। मुझे कौन से सीखना चाहिए?"

कोई भी डिज़ाइन पैटर्न वैक्यूम में नहीं रहता है। वे सभी एक साथ कैसे जाते हैं इसके विभिन्न पहलुओं को परिभाषित करते हैं। यह संभावना नहीं है कि किसी एक ऐप को सभी ज्ञात डिज़ाइन पैटर्न की आवश्यकता हो, लेकिन प्रत्येक ऐप अलग है और आप प्रत्येक ऐप के लिए उनके लिए एक अलग संयोजन की आवश्यकता होगी। जानना कि क्या उपयोग नहीं करना है, यह जानना महत्वपूर्ण है कि उपयोग करने के लिए क्या करना है। आपको कम से कम प्राथमिक डिजाइन पैटर्न के बारे में एक वार्तालाप ज्ञान की आवश्यकता है।

this list से शुरू करें और Head First Design Patterns पुस्तक पहले यहां उल्लिखित है। उन सभी के बारे में कुछ जानें। और समय नहीं होने के बारे में बेलीचैच न करें - समय बनाओ! फेसबुक को कुछ अतिरिक्त रातों से बाहर रहें या स्टार ट्रेक दोबारा दो या दो छोड़ दें।

इसके अलावा, पहले the GoF patterns book से बचें जबतक कि आप वास्तव में ओओ गुरु नहीं हैं। यह काफी घना है और तुरंत मानता है कि आप मूल्यों और पैटर्न के लिए आवश्यकता को समझते हैं। यह एक महान किताब है, सिर्फ एक महान पहली किताब नहीं है।

+0

के साथ डिजाइन पैटर सीखना शुरू करने के लिए ग्रेट बुक "यह जानना कि क्या उपयोग करना है, यह जानना महत्वपूर्ण है कि क्या उपयोग करना है।" आमीन भाई – corlettk

+0

क्या मैं पैराफ्रेश को सॉर्ट कर सकता हूं कि: यदि आपका अनुभवी प्रोग्रामर ओओ (बेहतर) या प्रक्रियात्मक (जैसे स्वयं) में ओओ सीख रहा है, तो जीओएफ "ठीक है" ... अनुभव आपको " वास्तव में अच्छे सॉफ्टवेयर डिजाइन के उच्च आदेश प्रेरणा "। चलो बस कहते हैं कि जीओएफ नोब के लिए नहीं है। – corlettk

+0

मैं सहमत हूं, corlettk। मैं खुद एक प्रक्रिया शरणार्थी हूँ। –

1

मैंने सोचा कि 'फ्लाईवेट' एक बहुत अच्छा पैटर्न था जिसकी वास्तव में किसी और चीज का कोई संबंध नहीं था। (यानी, आप कभी भी इसके स्थान पर किसी अन्य पैटर्न का उपयोग करने का फैसला नहीं करेंगे।)

लेकिन यदि आप केवल एक पैटर्न सीखने जा रहे हैं, तो 'विज़िटर' वह वही है जिसे आप चाहते हैं। यह एक अवधारणा है जो ओओ प्रोग्रामिंग के बाहर बहुत दूर है; यह map और fold जैसे कार्यात्मक प्रोग्रामिंग अवधारणाओं को समझने में आपकी सहायता करेगा। या ओओ विधियों जैसे कि collect और inject

1

रणनीति मेरी शॉर्टलिस्ट पर है। यह सशर्त तर्क के अपने कोड को छुटकारा पाने का एक शानदार तरीका है जो चीजों को करने के कई तरीके होने का समर्थन करने के लिए केवल वहां है, और यह "नीति" कोड निकालने में मदद करता है ताकि इसे अलगाव में परीक्षण किया जा सके।

1

GOF (चार के गिरोह) पुस्तक एक शुरुआत के रूप में इन सिफारिश की गई है:

सरलतम के साथ शुरू और सबसे सामान्य प्रतिरूप (पुस्तक में "पाठकों के लिए गाइड" में):

  1. सार फैक्टरी
  2. एडाप्टर
  3. कम्पोजिट
  4. डेकोरेटर
  5. फैक्टरी विधि
  6. ऑब्जर्वर
  7. रणनीति
  8. टेम्पलेट विधि
1

मैं हमेशा व्यक्तिगत रूप से महसूस किया है कि आप डिजाइन पैटर्न "सीख" नहीं है ... आप "पहचान" के लिए सीखने उन्हें। दूसरे शब्दों में, जब मैंने पहली बार डिज़ाइन पैटर्न पढ़ा, तो उनमें से बहुत से ऐसे समाधानों की तरह लग रहे थे जो पहले मैंने बनाए गए अनुप्रयोगों में स्वाभाविक रूप से बाहर निकले थे, लेकिन शायद मैंने इसे बिल्कुल वैसा ही नहीं किया था।

मेरी राय में, डिज़ाइन पैटर्न उन समाधानों को मानकीकृत करने के बारे में अधिक है जो आपको किसी विशेष समस्या को हल करने के तरीके को सिखाने के बजाय बार-बार भौतिक रूप से बनाते हैं।

संबंधित मुद्दे