16

हाल ही में मैंने बहुत सारे ब्लॉग पोस्ट देखे हैं जो कमजोर युग्मित अनुप्रयोगों को कैसे बनाया जाए। ढीले युग्मित अनुप्रयोगों को बनाते समय आप किस पैटर्न का सबसे अधिक उपयोग करते हैं? निर्भरता अन्तःक्षेपण? नियंत्रण का उलटा?ढीले युग्मन के लिए कौन से पैटर्न आप सबसे अधिक उपयोग करते हैं?

+0

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

+2

@ जॉन: पूरी तरह सटीक होने के लिए, निर्भरता इंजेक्शन वास्तव में नियंत्रण में उलझन की शैली है। – Kev

+0

निर्भरता इंजेक्शन एक तंत्र है, आईओसी एक कोडिंग शैली है। आप आईओसी के बिना DI प्राप्त कर सकते हैं। आपके पास डीओ (कम से कम कंटेनर आधारित डीआई) के बिना आईओसी हो सकता है, लेकिन यह थोड़ा मुश्किल होगा। – kyoryu

उत्तर

13

Model-View-Controller

एक तरफ

: चीजें हैं जो मुझे बंद हो जाता है लिख मिलकर अनुप्रयोगों सिर्फ पैटर्न नहीं हैं:

  • नामकरण। अगर मैं आसानी से अपनी कक्षा के लिए नाम नहीं सोच सकता, तो यह या तो कुछ भी नहीं करता है या बहुत सी चीजें नहीं करता है।

  • टेस्टेबिलिटी। अगर मैं आसानी से अपनी कक्षा की निर्भरताओं को नकल नहीं कर सकता, तो यह एक युग्मित डिजाइन है।

+0

एमवीसी और टेस्टेबिलिटी पर +1 ... मेरे अनुभवों से मेल खाता है – chakrit

+0

बहुत अच्छा अवलोकन - यह वास्तव में मेरे कुछ ... erm ... कोड में कम गर्व क्षणों पर प्रकाश डालता है। धन्यवाद :) – Jiaaro

+0

एमवीसी + एमवीपी एक अच्छा कॉम्बो है - 'वीसी' आमतौर पर एमवीपी में व्यू और प्रेजेंटर के पहलुओं पर नक्शा लगाता है। जीयूआई के लिए, यह एक तार्किक अलगाव के रूप में एमवीसी के साथ समाप्त होता है, और एमवीपी भौतिक (वर्ग-स्तर) अलगाव के रूप में समाप्त होता है। आईओसी और एडाप्टर पैटर्न के लिए वसंत के लिए – kyoryu

1

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

6

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

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

+0

+1। – Vinze

7

पर संदर्भित करने में सक्षम नहीं होंगे, मैं खुद को Command पैटर्न का उपयोग अक्सर ढूंढता हूं। यह एक ऐसा पैटर्न है जो परियोजना के बाद परियोजना प्रदान करता रहता है।

+1

इसके बारे में सोचने के लिए आओ ... मैं इसका बहुत उपयोग करता हूं .. शायद हम इसे थोड़ा अधिक उपयोग करते हैं? कमांड पैटर्न के लिए – chakrit

+0

+1। ऐसा हमेशा उपयोगी लगता है। – rlbond

2

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

"यह रखें शर्मीली यह रखें सूखी अन्य लड़का बताओ"

2

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

0

निर्भरता इंजेक्शन और आईओसी दोनों decoupling कोड के लिए उत्कृष्ट हैं।

डॉटनेट्रॉक्स show 362 बहुत अच्छी परिभाषा प्रदान करता है। एक स्पष्ट समझ प्राप्त करने के लिए संबंधित डीएनआर टीवी एपिसोड भी देखें।

1

निर्भरता इंजेक्शन उलट-ऑफ-नियंत्रण का एक रूप है।

स्प्रिंग फ्रेमवर्क में जावा प्रोग्रामर का एक बड़ा आधार है, और इसमें एक .NET कार्यान्वयन भी है।

1

The Strategy Pattern.

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

विकिपीडिया से:

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

0

निर्भरता इंजेक्शन पैटर्न है कि मैं लगभग सभी वर्गों कि मैं लिखने में इस्तेमाल करते हैं। केवल वे वर्ग जिनके पास कोई निर्भरता नहीं है (यानी मूल्य वस्तुएं) 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 है।

0

समग्र कोड/वास्तुकला शैली के रूप में नियंत्रण में उलटा।

DI आईओसी को कॉन्फ़िगर करने के लिए एक तंत्र के रूप में।

स्थानीय अबास्ट्रक्शन (मैं इसे "आदर्श पर्यावरण विकास" कहता हूं - लिखो कि आपके पास सटीक वातावरण था जो आप चाहते थे)।

ऑब्जेक्ट आमतौर पर शून्य विधियों का उपयोग करके संवाद करते हैं, और गेटर्स/सेटर्स रखने के बजाय डेटा पास करके।

मैं कोर बिजनेस क्लास में सीधे निर्भरता का उपयोग नहीं करता - यह हमेशा स्थानीय अमूर्तता के लिए सारणीबद्ध होता है, और एक स्पष्ट ब्रिज निर्भरता के साथ सौदा करता है।

मुझे पता चला है कि यह संयोजन बेहद लचीला कोड के लिए बहुत ही रचनात्मक अनुभव के साथ अनुमति देता है।

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

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