तो, "क्या डिजाइन पैटर्न भाषा सुविधाओं को याद कर रहे हैं"? [बन्द है]


12

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

पॉलग्रैम ने कहा "पीटर नॉरविग ने पाया कि डिजाइन पैटर्न में 23 में से 16 पैटर्न 'लिस्प में अदृश्य या सरल थे।"

या एक और वाक्य जो पुष्टि करता है कि मैंने हाल ही में जावास्क्रिप्ट में कक्षाओं का अनुकरण करने की कोशिश कर रहे लोगों के साथ क्या देखा:

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

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

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

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


16
यह कुछ भी स्वीकार करने में गलती होगी कि पॉल ग्राहम प्रोग्रामिंग भाषाओं के विषय में "उद्देश्य और तथ्यात्मक" के रूप में कहते हैं।
मैसन व्हीलर

5
मैं पॉल ग्राहम से असहमत नहीं हूं, लेकिन @MasonWheeler सही है, इंजीलवादी कई कारणों से महान हैं, लेकिन उनकी निष्पक्षता के लिए नहीं।
जिमी होफा

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

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

3
@ डैनियलबी, हर विशिष्ट प्रतिमान विफल हो जाएगा, क्योंकि वास्तविकता किसी भी प्रतिमान की तुलना में बहुत अधिक जटिल है। इसलिए, प्रत्येक और हर समस्या अपने स्वयं के योग्य है, डोमेन विशिष्ट मॉडल और प्रतिमान।
SK-लॉजिक

जवाबों:


10

मैं किसी भी गहन चर्चा या अध्ययन से अवगत नहीं हूं जो उन सभी बातों को ध्यान में रखता है ।

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

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

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

संपादित करें:

एक तरह से, मैं जो कह रहा हूं वह यह है कि पैटर्न ओओ चिकित्सकों को उच्च स्तर पर सोचने की अनुमति देते हैं, और उनकी भाषा के सिंटैक्स के भीतर रहते हुए, उनके वातावरण के लिए लगभग एक प्रकार के डीएसएल का निर्माण करते हैं। और हाँ, मैंने देखा है कि क्या होता है जब आप उन्हें हर जगह लागू करते हैं (देखें: AbstractSingletonProxyFactoryBean , हाँ, यह मौजूद है), या उन्हें लगता है कि वे किसी प्रकार की चांदी की गोली हैं। मुद्दा यह है कि जब वे वास्तव में सहज होने में लंबा समय लेते हैं, तो वे उच्च स्तर पर चीजों को अनुमानित / समझने योग्य बनाने के द्वारा वास्तव में कम जटिलता को समझते हैं। यह आपकी भाषा की विफलताओं के लिए एक पैच-किट होने के लिए बहुत अलग है।

2 संपादित करें - पैटर्न पर कुछ मज़ाक उड़ाने के लिए AbstractSingletonProxyFactoryBean काउंटर-उदाहरण जोड़े। पूरी तरह से निष्पक्ष होने के लिए, जब एक एओपी प्रकाश से देखा जाता है, यहां तक ​​कि यह काउंटर-उदाहरण रक्षात्मक है।


(+1) और स्वीकार करें क्योंकि आपने मेरी खोज को डीएसएल और एप्लिकेशन पैटर्न पर सीमित कर दिया है। बहुत विचारशील, और क्या आप पाठक के लिए विस्तार या लिंक कर सकते हैं, शायद कम-से-कम एक डीएसएल समरूप मैं इसे डोमेन-स्पेसिफिक लैंग्वेज कहूं।
एडुआर्ड फ्लोरिंसक्यू

@EduardFlorinescu धन्यवाद, मैंने DSL के लिंक के साथ अपडेट किया है।
डैनियल बी

मैं भी इस लेख ग्रूवी साथ इस मामले में अपने जवाब के हिस्से की पुष्टि पाया ibm.com/developerworks/java/library/j-eaed7/index.html
एडवर्ड Florinescu

1
@EduardFlorinescu यह बहुत दिलचस्प है, हालांकि मैं विशेष रूप से दुभाषिया पैटर्न का जिक्र नहीं कर रहा था; बल्कि, मेरा मतलब था कि कई पैटर्न काफी डोमेन-विशिष्ट हो सकते हैं, और उस डोमेन के डेवलपर्स के लिए लगभग मुहावरा बन सकते हैं। इस अर्थ में, वे एक तरह के डीएसएल बन जाते हैं, और समझने और उपयोग करने के लिए बहुत प्रयास नहीं करते हैं। जैसे जब मैं एक कमांड पैटर्न (एक गैर-डोमेन विशिष्ट उदाहरण) के माध्यम से पढ़ता हूं, मुझे पता है कि मैं किस बॉयलर कोड को सुरक्षित रूप से अनदेखा कर सकता हूं, और यह बहुत प्रयास नहीं करता है। लेकिन दिलचस्प लिंक के लिए धन्यवाद, फिर भी।
डैनियल बी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.