हाल ही में मैंने बहुत सारे ब्लॉग पोस्ट देखे हैं जो कमजोर युग्मित अनुप्रयोगों को कैसे बनाया जाए। ढीले युग्मित अनुप्रयोगों को बनाते समय आप किस पैटर्न का सबसे अधिक उपयोग करते हैं? निर्भरता अन्तःक्षेपण? नियंत्रण का उलटा?ढीले युग्मन के लिए कौन से पैटर्न आप सबसे अधिक उपयोग करते हैं?
उत्तर
: चीजें हैं जो मुझे बंद हो जाता है लिख मिलकर अनुप्रयोगों सिर्फ पैटर्न नहीं हैं:
नामकरण। अगर मैं आसानी से अपनी कक्षा के लिए नाम नहीं सोच सकता, तो यह या तो कुछ भी नहीं करता है या बहुत सी चीजें नहीं करता है।
टेस्टेबिलिटी। अगर मैं आसानी से अपनी कक्षा की निर्भरताओं को नकल नहीं कर सकता, तो यह एक युग्मित डिजाइन है।
एमवीसी और टेस्टेबिलिटी पर +1 ... मेरे अनुभवों से मेल खाता है – chakrit
बहुत अच्छा अवलोकन - यह वास्तव में मेरे कुछ ... erm ... कोड में कम गर्व क्षणों पर प्रकाश डालता है। धन्यवाद :) – Jiaaro
एमवीसी + एमवीपी एक अच्छा कॉम्बो है - 'वीसी' आमतौर पर एमवीपी में व्यू और प्रेजेंटर के पहलुओं पर नक्शा लगाता है। जीयूआई के लिए, यह एक तार्किक अलगाव के रूप में एमवीसी के साथ समाप्त होता है, और एमवीपी भौतिक (वर्ग-स्तर) अलगाव के रूप में समाप्त होता है। आईओसी और एडाप्टर पैटर्न के लिए वसंत के लिए – kyoryu
हां, महत्वपूर्ण लोग निर्भरता इंजेक्शन और नियंत्रण में उलझन में हैं, लेकिन सार फैक्ट्री और रजिस्ट्रीज को न भूलें।
वसंत के साथ निर्भरता इंजेक्शन मेरा पसंदीदा है। इसके अलावा मैवेन के साथ एक एपीआई मॉड्यूल के पीछे सभी कार्यान्वयन छिपाने की यह वास्तव में साफ चाल करना आम है। इसलिए यदि आपके कोड में तीन मॉड्यूल हैं, "एप्लिकेशन-कोर", "एक्सट्रेंससिस्टम-एपीआई" और "एक्सटेरेलसिस्टम", तो आप "एप्लिकेशन-कोर" केवल बाहरी सिस्टम-एपीआई पर निर्भर कर सकते हैं। वास्तविक कार्यान्वयन और उनकी सभी निर्भरता अनुप्रयोग-कोर मॉड्यूल के लिए पूरी तरह से अदृश्य हो सकती है। यह वास्तव में चिंताओं का एक बहुत कठिन जुड़ाव लागू करता है और ढीला युग्मन आसान बनाता है।
साफ बात यह है कि इन मेवेन सेटअप को लोड करने वाले आईडीई इन दृश्यता बाधाओं को लागू करते हैं। तो आप एसक्यूएल, एक्सिस, जेएक्सबी या जो भी आपके आवेदन-कोर
+1। – Vinze
पर संदर्भित करने में सक्षम नहीं होंगे, मैं खुद को Command पैटर्न का उपयोग अक्सर ढूंढता हूं। यह एक ऐसा पैटर्न है जो परियोजना के बाद परियोजना प्रदान करता रहता है।
मुझे लगता है कि मौलिक तकनीकों में से एक है "सिद्धांत पूछो मत, डेमेटर का कानून"। हो सकता है कि यह डीआई, यूआई या अन्य Desing पैटर्न की तरह नहीं है, लेकिन मुझे लगता है कि इस सिद्धांत को कम करने वाली वस्तुओं को कम से कम जोड़ दिया गया है और एक चीज अच्छी तरह से कर रही है।
"यह रखें शर्मीली यह रखें सूखी अन्य लड़का बताओ"
एसओए संबंधित पैटर्न (उदाहरण के लिए उद्यम सेवा बस) एक उच्च स्तर पर प्रस्ताव अमूर्त से कुछ और व्यापार सेवाओं और तकनीकी सेवाओं में चिंताओं की जुदाई का समर्थन । सेवाओं के बीच लूज युग्मन तब (बहसपूर्वक) ब्रोकर या बस पेश करके समर्थित है जो समाधान में सेवाओं को जोड़ता है।
निर्भरता इंजेक्शन और आईओसी दोनों decoupling कोड के लिए उत्कृष्ट हैं।
डॉटनेट्रॉक्स show 362 बहुत अच्छी परिभाषा प्रदान करता है। एक स्पष्ट समझ प्राप्त करने के लिए संबंधित डीएनआर टीवी एपिसोड भी देखें।
ब्रिज पैटर्न (http://en.wikipedia.org/wiki/Bridge_pattern)
Visitor pattern काम करता है बहुत अच्छी तरह से
निर्भरता इंजेक्शन उलट-ऑफ-नियंत्रण का एक रूप है।
स्प्रिंग फ्रेमवर्क में जावा प्रोग्रामर का एक बड़ा आधार है, और इसमें एक .NET कार्यान्वयन भी है।
मुझे आश्चर्य यह अभी तक का उल्लेख नहीं किया गया है हूँ - रणनीतियों आप कक्षाओं के लिए अपने डोमेन मॉडल में विभिन्न प्रकार के बारे में बहुत ज्यादा जानते हैं कि बनाने से बचने के लिए अनुमति देते हैं। प्रत्येक रणनीति विशिष्ट प्रकारों से जुड़े एक विशेष बातचीत को संहिताबद्ध करने के लिए ज़िम्मेदार है। यह एक मास्टर प्रकार बनाने से बचाता है जो कई अन्य लोगों के बारे में जागरूक है और प्रत्येक के कार्यान्वयन की बारीकियों से अवगत है।
विकिपीडिया से:
रणनीति पैटर्न रचना बजाय विरासत का उपयोग करता है। में रणनीति पैटर्न व्यवहार को अलग-अलग इंटरफेस और विशिष्ट कक्षाओं के रूप में परिभाषित किया गया है जो इन इंटरफेस को लागू करते हैं। विशिष्ट वर्ग इन इंटरफेस को समाहित करता है। यह व्यवहार और कक्षा जो व्यवहार का उपयोग करता है के बीच बेहतर decoupling की अनुमति देता है। व्यवहार को का उपयोग करने वाले वर्गों को तोड़ने के बिना बदला जा सकता है, और कक्षाएं व्यवहार को कार्यान्वयन को किसी भी महत्वपूर्ण कोड में परिवर्तन किए बिना लागू किए गए कार्यान्वयन को बदलकर स्विच कर सकती हैं। व्यवहार रन-टाइम के साथ-साथ डिज़ाइन-टाइम पर भी बदला जा सकता है। अगर वर्ग एक निर्भरता है, मैं हमेशा (निर्माता इंजेक्शन का प्रयोग करके) यह इंजेक्षन -
निर्भरता इंजेक्शन पैटर्न है कि मैं लगभग सभी वर्गों कि मैं लिखने में इस्तेमाल करते हैं। केवल वे वर्ग जिनके पास कोई निर्भरता नहीं है (यानी मूल्य वस्तुएं) DI पैटर्न का उपयोग नहीं करती हैं। डीआई का उपयोग करने वाली कक्षाओं का परीक्षण करने में सक्षम होना एक बड़ा लाभ है।
डि के लाभों के बारे में जानकारी के लिए, इन दो प्रस्तुतियों बहुत अच्छा कर रहे हैं: http://googletesting.blogspot.com/2008/11/clean-code-talks-dependency-injection.html http://googletesting.blogspot.com/2008/11/clean-code-talks-global-state-and.html
कोई डि कंटेनर डि पैटर्न का उपयोग करने की जरूरत है, लेकिन कार्यक्रम बड़ा (वर्ग या कई के दसियों हो जाता है जब स्कॉप्स), फिर एक डी कंटेनर बहुत बॉयलरप्लेट को कम कर सकता है। JVM पर मेरी डिफ़ॉल्ट पसंद Guice है।
समग्र कोड/वास्तुकला शैली के रूप में नियंत्रण में उलटा।
DI आईओसी को कॉन्फ़िगर करने के लिए एक तंत्र के रूप में।
स्थानीय अबास्ट्रक्शन (मैं इसे "आदर्श पर्यावरण विकास" कहता हूं - लिखो कि आपके पास सटीक वातावरण था जो आप चाहते थे)।
ऑब्जेक्ट आमतौर पर शून्य विधियों का उपयोग करके संवाद करते हैं, और गेटर्स/सेटर्स रखने के बजाय डेटा पास करके।
मैं कोर बिजनेस क्लास में सीधे निर्भरता का उपयोग नहीं करता - यह हमेशा स्थानीय अमूर्तता के लिए सारणीबद्ध होता है, और एक स्पष्ट ब्रिज निर्भरता के साथ सौदा करता है।
मुझे पता चला है कि यह संयोजन बेहद लचीला कोड के लिए बहुत ही रचनात्मक अनुभव के साथ अनुमति देता है।
- 1. क्या सीपीयू निर्देश सबसे अधिक शक्ति का उपयोग करते हैं?
- 2. क्या आप डिज़ाइन पैटर्न का उपयोग करते हैं?
- 3. क्या PHP अनुप्रयोग डिजाइन/डिज़ाइन पैटर्न आप उपयोग करते हैं?
- 4. PHP: आप इसे लिखने के लिए क्या उपयोग करते हैं?
- 5. रेल ऐप को प्रोफाइल करने के लिए आप कौन से टूल्स की सिफारिश करते हैं?
- 6. आप किस जावा प्रोफाइलिंग टूल का उपयोग करते हैं और आप कौन सा टूल सोचते हैं वह सबसे अच्छा है?
- 7. जिरा प्लगइन्स: आप क्या उपयोग करते हैं?
- 8. उच्च उपलब्धता अनुप्रयोग बनाने में कौन सा डिज़ाइन पैटर्न सबसे अधिक लीवरेज किए गए हैं?
- 9. फ्लोचार्ट बनाने के लिए आप क्या उपयोग करते हैं?
- 10. कौन सा डिजाइन पैटर्न सबसे उपयुक्त है?
- 11. निरंतर इंटरफेस के लिए सबसे अधिक अनुकूल विकल्प क्या हैं?
- 12. जटिल निर्माण प्रक्रिया के लिए आप क्या उपयोग करते हैं?
- 13. पसंद करते हैं malloc calloc से अधिक
- 14. सजावटी पैटर्न के लिए आप किस नामकरण सम्मेलन का उपयोग करते हैं?
- 15. प्रोजेक्ट आवश्यकताओं के प्रारंभिक मस्तिष्क-तूफान में आप कौन से टूल्स का उपयोग करते हैं?
- 16. वेब विकास के लिए आप क्या उपयोग करते हैं और आप इसे चट्टान क्यों सोचते हैं?
- 17. जीडब्ल्यूटी के साथ सर्वर से सर्वर संचार के लिए आप क्या उपयोग करते हैं?
- 18. आप सिनात्रा के लिए क्या उपयोग करते हैं?
- 19. आप एंड्रॉइड टर्मिनल एमुलेटर के लिए क्या उपयोग करते हैं?
- 20. मैक्रोज़ पढ़ें: आप उनके लिए क्या उपयोग करते हैं?
- 21. कौन सा .NET Memcached क्लाइंट आप उपयोग करते हैं, EnyimMemcached बनाम BeITMemcached?
- 22. मोबाइल उत्तरदायी डिजाइन बनाने में उपयोग करने के लिए सबसे महत्वपूर्ण मीडिया प्रश्न कौन से हैं?
- 23. आप मोनैडिक डिज़ाइन पैटर्न की पहचान कैसे करते हैं?
- 24. पाइथन मल्टीप्रोसेसिंग के लिए वैकल्पिक उपयोग पैटर्न वैश्विक राज्य के प्रसार से परहेज करते हैं?
- 25. सबसे छोटा रास्ता खोजने के लिए आप बिडरेक्शनल बीएफएस का उपयोग कैसे करते हैं?
- 26. क्या आप फ़िंग का उपयोग करते हैं?
- 27. आप PowerShell का उपयोग कैसे करते हैं?
- 28. गिट रेपो में कौन सी फाइलें सबसे अधिक जगह लेती हैं यह जानने के लिए कैसे?
- 29. ओएसजीआई ढीला-युग्मन सर्वोत्तम अभ्यास
- 30. डिज़ाइन पैटर्न का उपयोग कब करें आप कैसे जानते हैं?
बस एक महत्वपूर्ण बिंदु को स्पष्ट करने के लिए: सॉफ्टवेयर विकास निर्भरता इंजेक्शन (डीआई) और नियंत्रण में उलटा (आईओसी) समान और अक्सर विनिमय करने योग्य है। –
@ जॉन: पूरी तरह सटीक होने के लिए, निर्भरता इंजेक्शन वास्तव में नियंत्रण में उलझन की शैली है। – Kev
निर्भरता इंजेक्शन एक तंत्र है, आईओसी एक कोडिंग शैली है। आप आईओसी के बिना DI प्राप्त कर सकते हैं। आपके पास डीओ (कम से कम कंटेनर आधारित डीआई) के बिना आईओसी हो सकता है, लेकिन यह थोड़ा मुश्किल होगा। – kyoryu