बचने के लिए डिज़ाइन पैटर्न [बंद]


105

बहुत से लोग इस बात से सहमत प्रतीत होते हैं, कि सिंगलटन पैटर्न में कई कमियां हैं और कुछ तो पूरी तरह से पैटर्न से बचने का सुझाव भी देते हैं। यहाँ एक उत्कृष्ट चर्चा है । कृपया उस प्रश्न के लिए सिंगलटन पैटर्न के बारे में कोई टिप्पणी दें।

मेरा प्रश्न : क्या अन्य डिज़ाइन पैटर्न हैं, जिन्हें बहुत सावधानी से टाला जाना चाहिए या उपयोग किया जाना चाहिए?


मैं सिर्फ डिजाइन की महान सूची के बारे में ध्यान देना है Antipatterns deviq.com/antipatterns
डेवलपर

@casperOne आपने सवाल बंद क्यों किया? सवाल जायज था।
ब्लेपज़्टर

जवाबों:


149

पैटर्न जटिल हैं

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

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

याद रखें कि आपका लक्ष्य सादगीपूर्ण होना चाहिए और एक पैटर्न को नियोजित करना चाहिए यदि आपको अपने कोड में परिवर्तन का समर्थन करने की व्यावहारिक आवश्यकता दिखाई देती है।

पैटर्न पर सिद्धांत

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

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

  • 'इंटरफ़ेस' का कार्यक्रम, 'कार्यान्वयन' का नहीं। (गैंग ऑफ़ फोर 1995: 18)
  • Inher क्लास इनहेरिटेंस ’पर अनुकूल ऑब्जेक्ट कंपोजिशन’। (गैंग ऑफ़ फोर 1995: 20)

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

वहां से आप SOLID सिद्धांतों पर पढ़ सकते हैं जो रॉबर्ट सेसिल मार्टिन (उर्फ अंकल बॉब) द्वारा जाना जाता था । स्कॉट हैनेलमैन ने इन सिद्धांतों के बारे में अंकल बॉब का साक्षात्कार किया :

  • एस इंगले जिम्मेदारी सिद्धांत
  • कलम बंद सिद्धांत
  • एल iskov प्रतिस्थापन सिद्धांत
  • I nterface Segregation Principle
  • डी निर्भरता उलटा सिद्धांत

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


7
+1 बहुत अच्छा जवाब। ऐसा लगता है कि प्रत्येक (नौसिखिया) प्रोग्रामर आज अपने डिजाइन पैटर्न को जानता है या कम से कम उन्हें पता है कि वे मौजूद हैं। लेकिन बहुत सारे के बारे में कभी नहीं सुना, अकेले लागू करते हैं, अपने कोड की जटिलता का प्रबंधन करने के लिए एकल जिम्मेदारी की तरह कुछ आवश्यक सिद्धांत।
एलजेन्सो

21

डिज़ाइन पैटर्न के लेखकों ने जिस चीज़ के बारे में सबसे अधिक चिंतित किया, वह "विज़िटर" पैटर्न था।

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

"विज़िटर" पैटर्न का एक वैकल्पिक नाम "मल्टी-डिस्पैच" है, क्योंकि विज़िटर पैटर्न वह है जो आप तब समाप्त करते हैं जब आप दो प्रकार के आधार पर उपयोग करने के लिए कोड का चयन करने के लिए एकल-प्रकार प्रेषण ओओ भाषा का उपयोग करना चाहते हैं (या अधिक) विभिन्न वस्तुओं।

क्लासिक उदाहरण यह है कि आपके पास दो आकृतियों के बीच चौराहा है, लेकिन एक और भी सरल मामला है जिसे अक्सर अनदेखा किया जाता है: दो विषम वस्तुओं की समानता की तुलना करना।

वैसे भी, अक्सर आप कुछ इस तरह से समाप्त करते हैं:

interface IShape
{
    double intersectWith(Triangle t);
    double intersectWith(Rectangle r);
    double intersectWith(Circle c);
}

इसके साथ समस्या यह है कि आपने "IShape" के अपने सभी कार्यान्वयनों को एक साथ जोड़ दिया है। आपने निहित किया है कि जब भी आप पदानुक्रम में एक नया आकार जोड़ना चाहते हैं, तो आपको अन्य सभी "आकृति" कार्यान्वयनों को भी बदलना होगा।

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

अक्सर, एक और अवधारणा शुरू करने से आप उन संयोजनों की संख्या को कम कर सकते हैं जिन्हें आप वास्तव में लिखने जा रहे हैं:

interface IShape
{
    Area getArea();
}

class Area
{
    public double intersectWith(Area otherArea);
    ...
}

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


2
आगंतुकों के बारे में बोलते हुए, अंकल बॉब इसे "हर समय" butunclebob.com/ArticleS.Unclebus.IuseVisitor
Spoike

3
@Paul हॉलिंगवर्थ क्या आप एक संदर्भ प्रदान कर सकते हैं जहां यह कहता है कि डिज़ाइन पैटर्न लेखक चिंतित हैं (और वे चिंतित क्यों हैं)?
m3th0dman

16

सिंगलटन - सिंगलटन एक्स का उपयोग करने वाला एक वर्ग इस पर निर्भरता रखता है जिसे देखना कठिन है और परीक्षण के लिए अलग करना मुश्किल है।

वे बहुत बार उपयोग किए जाते हैं क्योंकि वे सुविधाजनक और समझने में आसान होते हैं, लेकिन वे वास्तव में परीक्षण को जटिल कर सकते हैं।

देखें सिंगलटन पैथोलॉजिकल लियर्स हैं


1
वे बस परीक्षण भी कर सकते हैं क्योंकि वे आपको मॉक ऑब्जेक्ट को इंजेक्ट करने के लिए एक बिंदु दे सकते हैं। यह सही संतुलन पाने के लिए नीचे है।
मार्टिन ब्राउन

1
@ मर्टिन: यदि पाठ्यक्रम में परीक्षण के लिए एक सिंगलटन को बदलना संभव है (यदि आप मानक सिंगलटन कार्यान्वयन का उपयोग नहीं करते हैं), लेकिन निर्माण में परीक्षण कार्यान्वयन को पारित करने की तुलना में यह कितना आसान है?
279

14

मेरा मानना ​​है कि खाका विधि पैटर्न आम तौर पर एक बहुत खतरनाक पैटर्न है।

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

2
मुझे लगता है कि जब भी आप खाका विधि का उपयोग करते हैं तो आप शायद रणनीति का उपयोग करना बेहतर समझते हैं। टेम्प्लेटमेथोड के साथ समस्या यह है कि बेस क्लास और व्युत्पन्न वर्ग के बीच पुनरावृत्ति होती है, जो अक्सर अधिक युग्मित होती है।
पॉल हॉलिंग्सवर्थ

5
@Paul: सही तरीके से उपयोग किए जाने पर टेम्प्लेट विधि बहुत अच्छी है, यानी जब अलग-अलग हिस्सों को उन हिस्सों के बारे में बहुत कुछ जानना होगा जो नहीं करते हैं। मेरा लेना यह है कि रणनीति का उपयोग तब किया जाना चाहिए जब आधार कोड केवल कस्टम कोड को बुलाता है और टेम्पलेट पद्धति का उपयोग तब किया जाना चाहिए जब कस्टम कोड को मूल रूप से आधार कोड के बारे में जानने की आवश्यकता होती है।
dsimcha

हाँ dsimcha, मैं सहमत हूँ ... जब तक कि क्लास डिजाइनर को इस बारे में पता है।
पॉल हॉलिंग्सवर्थ

9

मुझे नहीं लगता कि आपको डिज़ाइन पैटर्न (डीपी) से बचना चाहिए, और मुझे नहीं लगता कि आपको अपने आर्किटेक्चर की योजना बनाते समय अपने आप को डीपी का उपयोग करने के लिए मजबूर करना चाहिए। हमें केवल डीपी का उपयोग करना चाहिए, जब वे प्राकृतिक रूप से हमारी योजना से निकलते हैं।

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

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

इसलिए, संक्षेप में, मुझे नहीं लगता कि हमें डीपी से बचना चाहिए, हमें उन्हें तब गले लगाना चाहिए जब वे पहले से ही हमारी वास्तुकला में आकार ले रहे हों।


7

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

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


1
Kinda सच है, लेकिन कार्यान्वयन पर कुछ हद तक निर्भर है।
माइक वुडहाउस

6

यह सरल है ... डिज़ाइन पैटर्न से बचें जो आपके लिए स्पष्ट नहीं हैं या जिन्हें आप सहज महसूस नहीं करते हैं

कुछ के नाम ...

कुछ अव्यावहारिक पैटर्न हैं , जैसे:

  • Interpreter
  • Flyweight

कुछ कठिन भी हैं , जैसे:

  • Abstract Factory - निर्मित वस्तुओं के परिवारों के साथ पूर्ण सार कारखाना पैटर्न ऐसी हवा नहीं है जैसा कि ऐसा लगता है
  • Bridge - बहुत सार मिल सकता है, अगर अमूर्त और कार्यान्वयन को उपप्रकार में विभाजित किया जाता है, लेकिन कुछ मामलों में बहुत उपयोग करने योग्य पैटर्न है
  • Visitor - डबल प्रेषण तंत्र समझ वास्तव में एक जरूरी है

और कुछ पैटर्न हैं जो बहुत सरल लगते हैं , लेकिन उनके सिद्धांत या कार्यान्वयन से संबंधित विभिन्न कारणों के कारण इतने स्पष्ट विकल्प नहीं हैं :

  • Singleton - वास्तव में पूरी तरह से खराब पैटर्न नहीं है, सिर्फ TOO का उपयोग किया जाता है (अक्सर वहां, जहां यह उपयुक्त नहीं है)
  • Observer - महान पैटर्न ... बस कोड को पढ़ने और डिबग करने के लिए बहुत कठिन बनाता है
  • Prototype - डायनेमिज्म के लिए कंपाइलर चेक (जो अच्छा या बुरा हो सकता है ... निर्भर करता है)
  • Chain of responsibility - अक्सर डिजाइन में केवल जबरन / कृत्रिम रूप से धकेल दिया जाता है

उन "अनप्रैक्टिकल वाले" के लिए, किसी को उनका उपयोग करने से पहले वास्तव में सोचना चाहिए, क्योंकि आमतौर पर कहीं अधिक सुरुचिपूर्ण समाधान होता है।

"कठिन से कठिन" लोगों के लिए ... वे वास्तव में बहुत मदद करते हैं, जब उनका उपयोग उपयुक्त स्थानों पर किया जाता है और जब उन्हें अच्छी तरह से लागू किया जाता है ... लेकिन वे बुरे सपने होते हैं, जब अनुचित तरीके से उपयोग किया जाता है।

अब, आगे क्या ...


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

5

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


दिलचस्प पढ़ता है। लिंक के लिए धन्यवाद!
बॉम्बे

3
मोरन्स खराब कोड का उत्पादन करते हैं। क्या पैटर्न वाले मोरों ने मोरों की तुलना में बदतर कोड का उत्पादन किया है जिन्होंने कभी पैटर्न नहीं देखा है? मुझे नहीं लगता कि वे करते हैं। स्मार्ट लोगों के लिए, पैटर्न एक प्रसिद्ध शब्दावली प्रदान करते हैं, जो विचारों के आदान-प्रदान को आसान बनाता है। समाधान: पैटर्न सीखें और केवल स्मार्ट प्रोग्रामर से निपटें।
मार्टिन ब्राउन

मुझे नहीं लगता कि एक सच्चे मोरन के लिए बदतर कोड का निर्माण करना वास्तव में संभव है - कोई फर्क नहीं पड़ता कि वे किस उपकरण का उपयोग कर रहे हैं
1800 सूचना

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

5

कुछ का कहना है कि सेवा लोकेटर एक विरोधी पैटर्न है।


यह भी ध्यान रखना महत्वपूर्ण है कि कभी-कभी सेवा लोकेटर आवश्यक है। उदाहरण के लिए, जब आपके पास ऑब्जेक्ट की तात्कालिकता का उचित नियंत्रण नहीं है (जैसे कि C # में गैर-स्थिर मापदंडों के साथ विशेषताएँ)। लेकिन Ctor इंजेक्शन के साथ सर्विस लोकेटर का उपयोग करना भी संभव है।
सिनास्टेटिक

2

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


4
मैंने "A"
1800 इंफोर्मेशन

आपको इस स्वचालित निर्भरता विश्लेषण का विस्तार करने या लिंक करने की आवश्यकता हो सकती है जिसके बारे में आप बात करते हैं। इसके अलावा। नेट प्रतिनिधियों / घटनाओं में पर्यवेक्षक पैटर्न के बजाय उपयोग किया जाता है।
Spoike

3
@ साइकाइक: प्रतिनिधियों / घटनाओं प्रेक्षक पैटर्न का एक कार्यान्वयन है
orip

1
ऑब्जर्वर के खिलाफ मेरी व्यक्तिगत चिंता यह है कि यह कचरा एकत्र की गई भाषाओं में मेमोरी लीक बना सकता है। जब आप एक वस्तु के साथ समाप्त हो जाते हैं, तो आपको याद रखना चाहिए कि वस्तु साफ नहीं होगी।
मार्टिन ब्राउन

@orip: हाँ, यही कारण है कि आप प्रतिनिधियों / घटनाओं का उपयोग करते हैं। ;)
स्पिकाइ

2

स्पोइक के पोस्ट के पूरक, पैटर्न के लिए रिफैक्टिंग एक अच्छा पढ़ा है।


मैं वास्तव में इंटरनेट पर पुस्तक की सूची से जुड़ा हुआ हूं। :)
Spoike

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

0

Iterator एक और अधिक GoF पैटर्न है जिससे बचने के लिए, या कम से कम इसका उपयोग तभी करना है जब कोई भी विकल्प उपलब्ध न हो।

विकल्प हैं:

  1. प्रत्येक लूप के लिए। यह निर्माण अधिकांश मुख्यधारा की भाषाओं में मौजूद है और अधिकांश मामलों में पुनरावृत्तियों से बचने के लिए इसका उपयोग किया जा सकता है।

  2. चयनकर्ताओं ने la LINQ या jQuery। उनका उपयोग तब किया जाना चाहिए जब प्रत्येक उपयुक्त न हो क्योंकि कंटेनर से सभी वस्तुओं को संसाधित नहीं किया जाना चाहिए। पुनरावृत्तियों के विपरीत, चयनकर्ता एक जगह पर प्रकट करने की अनुमति देते हैं कि किस तरह की वस्तुओं को संसाधित किया जाना है।


मैं चयनकर्ताओं से सहमत हूं। Foreach एक पुनरावृत्ति है, अधिकांश OO भाषाएँ एक पुनरावृत्त इंटरफ़ेस प्रदान करती हैं जिसे आप फ़ॉरचेक की अनुमति देने के लिए कार्यान्वित करते हैं।
नील ऐतकेन

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

Iterators एक महान पैटर्न हैं। विरोधी पैटर्न एक पुनरावृत्ति के बिना IEnumerable / IEnumerator लागू किया जाएगा । मेरा मानना ​​है कि LINQ को yieldइटरेटर के माध्यम से संभव बनाया गया था । एरिक व्हाइट ने सी # 3.0 में इस पर कुछ महान चर्चा की है: blogs.msdn.com/b/ericwhite/archive/2006/10/04/… । इसके अलावा, पुनरावृत्तियों पर जेरेमी लिकेनेस की चर्चा पुनरावृत्तियों के साथ करें: wintellect.com/CS/blogs/jlikness/archive/2010/03/03/23/…

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

Fwiw, विकल्प, LINQ- जैसे F # सिंटैक्स `List.map (मज़ेदार x -> x.Value) xs` है, जो कि सूची बोध के बस के रूप में है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.