क्या डिजाइन पैटर्न पर आधारित हैं?


135

मैंने हमारे एक वरिष्ठ डेवलपर्स के साथ चर्चा की, जो 20 वर्षों से कारोबार में है। वह ओंटारियो में एक ब्लॉग के लिए बहुत अच्छी तरह से जाना जाता है जो वह लिखता है।

अजीब बात यह है कि उसने मुझे क्या कहा: उसने कहा कि एक कोड का एक टुकड़ा है जो एक बुरे सपने के साथ काम करना है क्योंकि यह एक पाठ्यपुस्तक से लिखा गया था, और वास्तविक दुनिया का कोई हिसाब नहीं है। UI / डेटाबेस / डेटा लेयर में एक नया फ़ील्ड जोड़ने में 2-3 घंटे लगते हैं, जबकि उसके कोड में 30 मिनट लगते हैं।

दूसरी बात यह भी है कि वह डिजाइन पैटर्न से बचते हैं क्योंकि अधिकांश प्रोग्रामर उन्हें समझ नहीं पाते हैं और वे रखरखाव के नजरिए से अच्छे नहीं हैं।

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

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

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

आप इन बयानों से क्या बनाते हैं?



67
व्यक्तिगत रूप से मैं "सर्वोत्तम अभ्यास" (औचित्य के बिना) के रूप में संदर्भित किसी भी चीज से घबरा जाता हूं क्योंकि इसका आमतौर पर मतलब होता है "मुझे नहीं पता कि यह एक अच्छा विचार क्यों है लेकिन मैं चाहता हूं कि आप इसे वैसे भी करें; चर्चा का अंत"
रिचर्ड टिंगल

34
उद्योग मानक, डिजाइन पैटर्न, और सर्वोत्तम प्रथाएं केवल "चीजों के लिए शर्तें हैं जो किसी ने अपने संदर्भ में बेहतर काम करने की बात कही है, इसलिए यह आपके ऊपर बहुत अधिक प्रभाव डालती है। शायद" ®। आपके वरिष्ठ देव का अधिकार।
CptEric

86
इससे एजाइल का कोई लेना-देना नहीं है।
को ऑर्बिट

68
"वरिष्ठ एमवीसी डेवलपर" "डिजाइन पैटर्न खराब हैं" संज्ञानात्मक असंगति
दान पेंट्री

जवाबों:


239

ये किसी ऐसे व्यक्ति के शब्द हैं, जिसने सफलता पाई है और ऐसे लोगों की उपेक्षा करता है जो उसे यह बताने की कोशिश करते हैं कि पैटर्न शब्दजाल में क्या करना है जो उसे समझ में नहीं आता है।

डिजाइन पैटर्न और सर्वोत्तम अभ्यास एक ही चीज नहीं हैं। कुछ लोग सोचते हैं कि वे ऐसे लोग हैं जो जानते हैं कि वे क्या कर रहे हैं। भले ही वे क्या कर रहे हैं के लिए उचित नाम नहीं जानते।

उनके नाम होने से पहले डिज़ाइन पैटर्न मौजूद थे। हमने उन्हें उनके बारे में बात करना आसान बनाने के लिए नाम दिए। एक नाम रखने वाला एक पैटर्न इसे अच्छी बात नहीं बनाता है। यह इसे पहचानने योग्य चीज बनाता है।

इस आदमी की संभावना है पैटर्न का उपयोग न तो आप में से किसी ने कभी नहीं सुना। यह ठीक है, जब तक आपको उससे बात करने की आवश्यकता नहीं है कि कुछ कैसे किया जाता है। वह या तो आपसे बात करने के लिए सीखने वाला है या आप उससे बात करना सीखना चाहते हैं। जिसका "सही" है, उससे कोई लेना-देना नहीं है।


12
इस बात से सहमत हैं कि, आजकल ज्यादातर लोग "डिज़ाइन पैटर्न" शब्द का उपयोग करते हैं, तो वे आमतौर पर गैंग ऑफ़ फोर का उल्लेख करते हैं ।
रॉबर्ट हार्वे

35
राइट और मुझे अंग्रेजी का उपयोग करना पसंद है, यह मेरे लिए समझ में आता है। पता नहीं क्यों इसे अपनाने के लिए फ्रेंच लोगों को इतनी देर लग रही है। जब तक वे करते हैं मैं इस मीट्रिक प्रणाली के बारे में थोड़ा जानने जा रहा हूं जिसके बारे में मैं सुनता रहता हूं।
कैंडिड_ऑरेंज

6
ऐसा नहीं हो सकता है कि वह नहीं समझता है, यह भी हो सकता है कि वह समझता हो लेकिन वह जानता है कि सभी स्थितियों में सब कुछ लागू नहीं होता है।
whatsisname

148
"एक नाम रखने वाला एक पैटर्न इसे अच्छी चीज नहीं बनाता है। यह इसे पहचानने योग्य बनाता है।" ओह माय गॉड यह उस समस्या का सबसे अच्छा सारांश है जो मैंने कभी सुना है: डी
लाइटनेस दौड़ ऑर्बिट

7
@JanDoggen उन्हें (विरोधी) पैटर्न कहा जाता है क्योंकि वे सॉफ़्टवेयर विकास में सामान्य पैटर्न भी हैं (जिनमें से कुछ डिज़ाइन-संबंधित पैटर्न हैं)।
JAB

96

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

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

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

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


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

34
@ Igneous01: ध्यान दें कि एक प्रोफेसर जिसे कभी कोई वास्तविक दुनिया का अनुभव नहीं था, वह "अच्छा" मानता है जो कि पैसे बनाने की कोशिश कर रहे एक व्यवसाय से मौलिक रूप से भिन्न हो सकता है "अच्छा" मानता है।
रॉबर्ट हार्वे 20

8
"दुर्भाग्य से, कई सॉफ्टवेयर डेवलपर्स सॉफ्टवेयर पैटर्न शब्दावली को अच्छी तरह से समझ नहीं पाते हैं ताकि वे अपनी प्रोग्रामिंग समस्याओं को ठीक से लागू कर सकें।" यह मुझे संक्षेप में है। =) मैंने जिन लोगों के नाम देखे हैं, उनमें से एक वास्तविक क्रियान्वयन के लिए मेरे पास बहुत कठिन समय है। मेरे पास संभवतः कोड के ब्लॉक हैं जिन्हें मैंने लिखा है कि उन्हें पैटर्न को लागू करने के रूप में वर्गीकृत किया जा सकता है, लेकिन मुझे यकीन है कि आप बता नहीं सकते कि कौन से हैं। मुझे लगता है कि पैटर्न कोड की तुलना में बहुत कम महत्वपूर्ण हैं, वास्तव में समझने योग्य है और आवश्यकताओं में परिवर्तन कोड के कुछ स्थानों को प्रभावित करता है।
jpmc26

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

23
"कोड जो वास्तव में ओवरहेड को जोड़ने के अलावा कुछ और पूरा करता है" - मैंने सोचा था कि उद्यम सॉफ्टवेयर का लक्ष्य यह था कि कोई कोड नहीं होना चाहिए जो वास्तव में कुछ भी पूरा करता है । कोई भी वास्तविक व्यवहार जो सॉफ़्टवेयर के पास हो सकता है, या तो स्तरित डिज़ाइन की एक उभरती हुई संपत्ति होनी चाहिए, या फिर व्यापार नियमों से तालिका-संचालित होनी चाहिए जो कोड डेटा के रूप में व्यवहार करता है। मैं केवल 50% मजाक कर रहा हूं।
स्टीव जेसोप

86

Stackoverflow.SE और Programmers.SE ज्यादातर लोगों को SOLID जैसी सर्वोत्तम प्रथाओं का पालन करने के लिए प्रोत्साहित करते हैं, न कि उद्योग मानकों को । और मानो या न मानो, वास्तव में डी उद्योग उद्योग मानक "कीचड़ की बड़ी गेंद" वास्तुकला है - गंभीरता से।

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


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

1
@JeremyHolovacs: बिल्कुल नहीं। मुझे जो समस्या दिख रही है, वह यह है कि शिक्षित डेवलपर्स ने भी उनका उपयोग किया है। मैंने अक्सर ऐसे समाधान देखे हैं जहां अनुभवी देवों ने एक समस्या को एक पैटर्न में ढालने की कोशिश की, जो "किसी भी तरह" फिट थी, लेकिन अच्छी तरह से नहीं।
Doc Brown

45
  1. डिजाइन पैटर्न विचारों को संप्रेषित करने के लिए इस्तेमाल किए जाने वाले नाम हैं। मैंने अक्सर खुद को ऐसी चीजें करते पाया, जो बाद में मैंने पाया कि एक नाम है। इस प्रकार, "गैर-डिज़ाइन पैटर्न तरीके" के विपरीत कोई "डिज़ाइन पैटर्न तरीका" नहीं है।

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

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


5
आरई: नंबर 1, हां, वहाँ रहा है - मैंने टेम्पलेट पैटर्न का आविष्कार किया। मैंने पहले ऐसा नहीं किया था। या पहले जैसा कुछ भी।
ग्रिम द ओपिनर

29

सूप में एक और रूपक जोड़ने के लिए, डिज़ाइन पैटर्न Clippy Microsoft Office सहायक हैं। "आप सामान की एक पूरी गुच्छा के लिए एक ही काम कर रहे हैं लगता है। क्या मैं आपको Iterator या लेनदार की पेशकश करके आपकी मदद कर सकता हूं?"

उन पैटर्नों का एक अच्छा लेखन यह इंगित करेगा कि जब यह कुछ उसी तरह से उपयोगी हो, जिस तरह से पहले कई बार किया गया हो, तो आप पहली बार क्या गलतियाँ करेंगे, और आप उन गलतियों से बचने के लिए कौन से सामान्य तरीके खोज सकते हैं। । इसलिए आप डिज़ाइन पैटर्न पढ़ते हैं (या मेमोरी से इसकी समीक्षा करते हैं) और फिर आप अपने काम पर लग जाते हैं। आप जो नहीं कर सकते हैं, वह केवल Clippy और विज़ार्ड्स का उपयोग करके प्राप्त किया जाता है ।

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

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

तो यह लगभग निश्चित रूप से एक गलती है सिद्धांत पर एक Iterator लिखने से बचने के लिए क्योंकि आप डिजाइन पैटर्न से बचना पसंद करते हैं।

UI / डेटाबेस / डेटा लेयर में एक नया फ़ील्ड जोड़ने में 2-3 घंटे लगते हैं, जहां उसके कोड में 30 मिनट लगते हैं।

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

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

जैसा कि उसके खिलाफ है, उसके डिजाइन में एक नया यूआई लिखने में कितना समय लगता है, और एक स्तरित वास्तुकला में कितना समय लगता है? यदि प्रोजेक्ट ने उसे लगातार डेटा जोड़ने के बजाय एक निश्चित डेटा मॉडल पर नए UI बनाने और तैनात करने के लिए बुलाया है, तो उम्मीद है कि उसने इसके लिए डिज़ाइन किया होगा। या साथ ही। लेकिन इसके सभी लाभों के लिए, यह कहते हुए कि "हम चुस्त हैं" दुख की बात है कि इसका मतलब यह नहीं है कि आपको कभी भी दूसरा व्यापार बंद नहीं करना पड़ेगा!

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


5
"डिजाइन पैटर्न क्लीपी द माइक्रोसॉफ्ट ऑफिस हेल्पर हैं" मैं आज रात बुरे सपने आने वाला हूं।
मेटलमेस्टर

"जहां अनुभवहीन लोग गलत हो सकते हैं [जब वे हैं] कोड को एक साथ डिज़ाइन पैटर्न से जोड़कर डिज़ाइन करने का प्रयास करें जब तक कि यह समाप्त न हो जाए।" सुनो सुनो। काश मैं देने के लिए कई upvotes था। :)
क्विकप्लसोन

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

20

आपके सहकर्मी को NIH सिंड्रोम ("इनवेंटर्ड नॉट हियर") से पीड़ित लगता है ।

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

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

  • शायद आपके सहयोगी हम में से अधिकांश की तुलना में बहुत अधिक बुद्धिमान हैं और वह ध्यान देने योग्य उत्पादकता में कमी के बिना रीइनवेंटिंग पैटर्न के ओवरहेड को बर्दाश्त कर सकते हैं?

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

अधिकांश उद्यम अनुप्रयोगों में अन्य आर्किटेक्चर के लिए स्तरित दृष्टिकोण बेहतर साबित हुए हैं। विश्व स्तर के अग्रणी पैकेजों को इस विचार के आसपास संरचित किया जाता है और परिमाण के आदेशों द्वारा कारीगर आर्किटेक्चर को बेहतर बनाया जाता है। मार्टिन फाउलर ने "उद्यम वास्तुकला के पैटर्न" पर अपनी उत्कृष्ट पुस्तक में इस दृष्टिकोण को प्रस्तुत किया है । ओह! फिर से क्षमा करें: यह सिद्ध पैटर्न के बारे में है; अपने सहयोगी के NIH दृश्य में कोई मौका नहीं; ;-)


एनआईएच सिंड्रोम, दिलचस्प, मैंने इसके बारे में पहले नहीं सुना था। जाहिर है कि यह मुद्दा है कि ज्यादातर उत्तरी अमेरिकी नियोक्ता अपने कर्मचारियों का प्रबंधन करने का सामना कर रहे हैं!
भुगतान करें

@ मैं यह सुनिश्चित नहीं कर रहा हूं कि यह उत्तरी अमेरिका तक ही सीमित है ;-) यह हमेशा उन समाधानों के लिए लुभाना है जो हम पहले से ही कुछ सफलता के साथ उपयोग करते थे। यह सुविधा क्षेत्र है। लेकिन चुनौतीपूर्ण सहयोगियों के साथ हमेशा नए विचारों और रचनात्मक संवाद के लिए खुला रहना चाहिए। आखिरकार, " आप अकेले तेजी से यात्रा करते हैं, लेकिन एक साथ आगे बढ़ते हैं। "
क्रिस्टोफ़

16

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

डिजाइन पैटर्न मानक समस्याओं के मानक समाधान हैं। हालांकि, यदि आपके पास समस्या नहीं है, तो इसे हल करना प्रयास की बर्बादी है।

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

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


1
के लिए +1 Design patterns are standard solutions to standard problems। मैं थोड़ा निराश हूँ कि अधिक उत्कीर्ण उत्तरों में नहीं देखा। ऐसा करने के लिए पहले यह पहचानना आवश्यक है कि क्या आपकी समस्या एक मानक समस्या से मेल खा रही है, और वास्तव में, वे अक्सर व्यस्त रहते हैं।
वालफ्रैट

8

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

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


6

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

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

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

तो - नहीं - डिजाइन पैटर्न फुर्तीली विकास के वातावरण में नहीं हैं; हालांकि विकास शायद ही कभी सामान्य है और एक पैटर्न को पूरी तरह से फिट करने के लिए पर्याप्त और (अनुभवी) डेवलपर यह जानता है।


5

UI / डेटाबेस / डेटा लेयर में एक नया फ़ील्ड जोड़ने में 2-3 घंटे लगते हैं, जहां उसके कोड में 30 मिनट लगते हैं।

यदि आप एक डिज़ाइन को "ऑप्टिमाइज़" करना चाहते हैं, तो आपको यह कहने की ज़रूरत है कि आप क्या अनुकूलित करने की कोशिश कर रहे हैं।

उदाहरण के लिए, एक रेसिंग साइकिल एक अनुकूलित वाहन है ... और बोइंग 747 भी एक अनुकूलित वाहन है ... लेकिन वे आवश्यकताओं के एक अलग सेट के लिए अनुकूलित हैं।

उदाहरण के लिए, "एमवीसी" पैटर्न का विचार चीजों के लिए अनुकूलन करता है:

  • एक ही मॉडल के विभिन्न विचार (देखें मॉडल से स्वतंत्र है)
  • प्रत्येक परत को अलग-अलग (जैसे अलग-अलग टीमों द्वारा) विकसित किया जा सकता है और एकीकरण से पहले अलग से (यूनिट परीक्षण) परीक्षण किया जाता है
  • आदि।

जबकि उनका कोड कुछ और के लिए अनुकूलन कर सकता है, उदाहरण के लिए:

  • कोड की न्यूनतम लाइनें
  • एक व्यक्ति के लिए एक बदलाव करना आसान है जो सभी परतों को प्रभावित करता है (वास्तव में बिल्कुल अलग परतें नहीं होने से)
  • आदि।

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


"वास्तव में अलग-अलग परतें न होने से" - या, निष्पक्ष होने के लिए, स्वीकार्य "डिफ़ॉल्ट व्यवहार" होने से जो परतों के माध्यम से फैलता है। उदाहरण के लिए, वेब-आधारित SQL व्यवस्थापक एप्लिकेशन एक प्रस्तुति परत है जो डेटाबेस परत में परिवर्तन होने पर स्वचालित रूप से स्वयं को अपडेट करता है। यह सिर्फ इतना ही है, सीमित उपयोगों के अलावा, वे वास्तव में आपके डेटा को उस तरह से पेश नहीं करते हैं जैसा आप इसे उपयोगकर्ताओं को प्रस्तुत करना चाहते हैं :-) आधा घंटे एक नए क्षेत्र को जोड़ने के लिए अविश्वसनीय रूप से त्वरित लगता है, यह सुझाव देते हुए कि डिजाइन करने के लिए कोई महत्वपूर्ण यूआई नहीं है। नए क्षेत्र, स्तरित या अन्यथा के साथ संबंध।
स्टीव जेसप

4

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

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

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

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

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

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

आमतौर पर , पैटर्न एक सुसंगत रूप डिजाइन की अनुमति देगा, और 100% मूल विचारों को लिखने के पक्ष में सभी पैटर्नों की अनदेखी करने से बेहतर प्रदर्शन करेगा, लेकिन आप सभी पैटर्न से बच नहीं सकते। उदाहरण के लिए, यदि y = x + 5, तो क्या आप वास्तव में y = x + (5 * 3 + 15/3) / 4 लिखने जा रहे हैं, बस x + 5 लिखने के पैटर्न से बचें? नहीं आप नहीं हैं। आप y = x + 5 लिखने जा रहे हैं, और अगली समस्या के लिए आगे बढ़ते हैं।

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


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

2

आप 'डिजाइन पैटर्न से बच सकते हैं', सिवाय इसके कि मैं आपके सिस्टम के किसी भी दो हिस्सों को डिजाइन करने से बचता हूं, उसी तरह (जिसकी मैं अनुशंसा नहीं करता और मुझे संदेह है कि आपका वरिष्ठ डेवलपर कर रहा है)। वह शायद इसका मतलब है कि 'आँख बंद करके डिज़ाइन का उपयोग करने से सिर्फ इसलिए बचें क्योंकि यह एक डिज़ाइन पैटर्न का पालन करता है'। आप जो कर रहे हैं उसके बारे में सोचना निश्चित रूप से एक 'सर्वोत्तम अभ्यास' है, और एक विश्वविद्यालय को सिखाने के लिए मौजूद होना चाहिए ; दुख की बात है कि ऐसा नहीं हो रहा है।


2

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

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

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

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