2009-06-15 12 views
6

मैंने हाल ही में कुछ एक्शनस्क्रिप्ट/फ्लेक्स प्रोग्रामिंग करना शुरू कर दिया है और मैं ... आश्चर्यचकित हूं ... सिंगलटन की संख्या से मैं देखता हूं। वह हर जगह हैं! मानक पुस्तकालय, ढांचे ... हेक, मैंने आज सुबह एक ब्लॉग पोस्ट भी पढ़ा जहां लेखक ने उल्लेख किया कि उन्होंने अपने कुछ वर्गों में अकेले सिंगलटन का पुन: काम किया है!सिंगलेट्स एक्शनस्क्रिप्ट संस्कृति में क्यों फैलता है?

क्या एएस समुदाय को सिंगलेट्स को इतना पसंद क्यों है, इस बारे में कोई उचित स्पष्टीकरण है?

उत्तर

5

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

इसके अलावा सिंगलेट्स उन वस्तुओं के रनटाइम प्रभाव को कम करते हैं जो बनाने के लिए महंगी हैं।

+1

मुझे यह विडंबना मिलती है क्योंकि, मेरे लिए, बड़े पैमाने पर सिंगलेट का उपयोग करना एक कार्यात्मक प्रोग्रामिंग भाषा का उपयोग करने जैसा लगता है। – Kai

+0

वैसे इन तकनीकों के बीच कोई कट-एंड-ड्राईड सीमाएं नहीं हैं। अच्छी प्रैक्टिस उन सभी से सर्वश्रेष्ठ बिट्स उधार लेने के लिए विकसित होती है। – skaffman

+5

@ काई: वास्तव में? यही कारण है कि?मेरे लिए यह बिल्कुल विपरीत जैसा लगता है: सिंगलटन वैश्विक स्थिति को बढ़ावा देता है (इसलिए बेवकूफ़ों को हतोत्साहित करता है), जबकि कार्यात्मक भाषाएं शुद्ध कार्यों को प्रोत्साहित करती हैं (जो वैश्विक राज्य को दृढ़ता से प्रोत्साहित करती है/बेवकूफी को प्रोत्साहित करती हैं)। –

3

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

हर किसी को मिस्को हेवरी ब्लॉग (start with this one) पढ़ना चाहिए, वह उनका उपयोग करने के खिलाफ कुछ उत्कृष्ट तर्क देता है।

सिंगलटन के पास इसका उपयोग होता है, उदाहरण के लिए लॉगर, लेकिन वे उपयोग किए जाने के तरीके हैं।

@skaffman प्रदर्शन लाभों के संबंध में, सिंगलटन पैटर्न को लागू किए बिना आपके आवेदन में किसी ऑब्जेक्ट का एक उदाहरण होना उचित है।

+0

सिंगलेट्स की आवश्यकता नहीं है सिंगलटन डिजाइन पैटर्न का उपयोग। वास्तव में, पैटर्न (जैसा कि गोफ बुक में निर्दिष्ट है) बल्कि अप्रिय और कच्चा है। आवेदन ढांचे के माध्यम से सिंगलेट को लागू करने के लिए बेहतर। – skaffman

+0

शानदार लेख, लिंक के लिए धन्यवाद! – Soviut

5

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

पुराने दिनों फ्लैश डेवलपर्स में आसानी से उपयोग 'TellTarget' एक निश्चित मूवीक्लिप जो एक MovieClip अंदर अंदर एक MovieClip अंदर नेस्टेड किया जा सकता है ... आदि को पाने के लिए यह बस जिस तरह से इसका इस्तेमाल किया था किया गया था ... उन लोगों (मेरे सहित) में कभी भी कोई सॉफ्टवेयर पृष्ठभूमि नहीं थी, इसलिए हम इस दृश्य दुनिया में रहते थे और फ्लैश डिजाइनरों के विचारों के बारे में सोच रहा था। एएस 2 में बहुत से लोग (जो लोग थे और जो कोडिंग में अच्छे नहीं थे) में भी कक्षाओं के अंदर 'स्कॉप्स' खोने में बहुत सारी समस्याएं थीं ... मुझे प्रॉक्सी-क्लास याद है जिसने हमें कक्षा में दायरे को खोने में मदद नहीं की । इन दिनों सिरदर्द के बहुत सारे। जिन लोगों ने धीरे-धीरे कोड के अपने ज्ञान को अपग्रेड किया, उन्होंने कभी भी ओओपी में कोडिंग के नए तरीकों के चारों ओर अपने सिर लपेटे नहीं ... उनमें से कुछ सोचते हैं कि सिंगलटन को ' वैश्विक' के रूप में इस्तेमाल किया जा सकता है। वे हमेशा अपने आवेदन में कहीं से भी ' वैश्विक' से बात कर सकते हैं।

मुझे लगता है कि यह आसान है कि ...

-1

मैं के बाद से इस संबंध में अपनी स्थिति बदल गया है।

actioncript3 haas में ऑब्जेक्ट्स का उपयोग करके मुझे मॉड्यूलैटरी बढ़ाने के लिए अच्छी तरह से सेवा मिली।

मैं अनुमान लगाता हूं कि मेरे जैसे, ओओपी के लाभ सबसे शुरुआती फ़्लैश डेवलपर्स के लिए उपभोग कर रहे हैं और मुश्किल से आ रहे हैं।

मुझे लगता है कि इसके लिए वास्तव में दो कारण हैं।

1।) मूल बातें के बारे में बात करना उबाऊ है, इसलिए अधिकतर जानकारी इतनी जटिल है। ओओपी वास्तव में समझने योग्य पुन: प्रयोज्य भागों में एक प्रणाली तोड़ रहा है।

2.) प्रक्रियात्मक प्रोग्रामिंग कार्यप्रवाह के समान है, यह एक निश्चित कार्य प्रवाह में आप ताले, लेकिन यह आसान

3. समझने के लिए प्रोग्रामर करता है कि शुरुआत के लिए) फ्लैश का एक बहुत की स्थिति के प्रबंधन के बारे में है फ्लैश विजेट, इसलिए यह एक केंद्रीय स्थान पर जानकारी का प्रबंधन करने के लिए कुछ स्तर का अर्थ बनाता है।

---------------- मूल प्रतिक्रिया ----------------

मुझे लगता है कि समुदाय के रूप में का हिस्सा हूं, वह सिंगलेट्स पसंद करता है (और उपयोग करता है)।

मैं प्रोग्रामिंग के लिए अपेक्षाकृत नया हूं (3 साल PHP/MySQL/जावास्क्रिप्ट/एक्शनस्क्रिप्ट proffesionally)।

मुझे लगता है कि मॉड्यूलर प्रोग्रामिंग और क्लासिकल क्लास आधारित विरासत ओओपी के बीच स्पष्ट अंतर है।

मॉड्यूलर प्रोग्रामिंग, जो मैं समझता हूं, ओओपी का बड़ा हिस्सा है, प्रभावी प्रोग्राम डिज़ाइन का एक अत्यंत महत्वपूर्ण हिस्सा है।

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

हालांकि, मैं विरासत आधार OOP के सबसे सिर्फ गर्म हवा है यह और अधिक प्रभावी परस्पर मॉड्यूल

मेरी राय में का एक संग्रह के साथ ऐसा कर पाते हैं। एक दूसरे के साथ बातचीत करने वाले मॉड्यूल एक प्रोग्राम की गतिविधियों को मॉडल करने का एक और अधिक प्रभावी तरीका है जो मूल रूप से एक ही चीज़ के 15 संस्करण हैं।

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

मैंने जिन कारणों को अक्सर पढ़ा है (और विरासत आधारित ओओपी के पीछे सुना है) यह है कि यह पठनीयता और रखरखाव को बढ़ाता है। मेरे लिए इसका मतलब यह है कि प्रोग्रामर प्रोग्राम के लिए प्रभावी प्रणाली की तुलना में उनके लिए आसान एक प्रणाली का उपयोग करेंगे।

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

मैं ओओपी के लिए हूं लेकिन मुझे सिंगलटन, प्रोटोटाइप या मॉड्यूल आधारित अप्राच पसंद है।

+0

आप उपेक्षा करते हैं तथ्य यह है कि विरासत मॉडल भी प्रकार की सुरक्षा को लागू करता है। यदि आप एक खेल बना रहे हैं तो यह एक बड़ा सौदा है खेल वस्तुएं एक ही वस्तु से निकलती हैं, सभी विनाशकारी वस्तुएं विनाशकारी इंटरफ़ेस का वारिस करती हैं, आदि विरासत केवल ओवरराइड के बारे में नहीं है। – Soviut

+0

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

+0

जिज्ञासा से बाहर, क्या आप इकाई या अपने कोड पर स्वचालित परीक्षण के किसी अन्य रूप का प्रदर्शन करते हैं? –

3

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

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