2009-02-05 12 views
9

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

उत्तर

2

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

7

ठीक है मुझे लगता है कि मैंने अनुभव किया है कि कुछ डेवलपर्स आईओसी को समझने में सक्षम नहीं हैं। हमारे पास कुछ लोग हैं जो इसके खिलाफ थे, इसके अलावा कोई कारण नहीं था कि वे उन्हें समझ में नहीं आए। (यह नहीं कह रहा कि यह किसी के खिलाफ होने का एक बुरा कारण है, बिलकुल नहीं।)

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

19

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

कोड को समझने में कठोर बनाने के लिए - काफी विपरीत! निर्भरताओं के साथ स्पष्ट रूप से कहा गया है, प्रत्येक घटक को समझना बहुत आसान है, और कॉन्फ़िगरेशन फ़ाइल यह स्पष्ट करती है कि संपूर्ण एप्लिकेशन एक साथ कैसे लटकता है।

+3

एक बार जब आप आईओसी कंटेनर का उपयोग कर रहे हैं, तो कोड को समझना आसान है। हालांकि, इससे पहले कि वे इसका इस्तेमाल करें, कुछ डेवलपर्स को यह समझना मुश्किल हो सकता है कि उन्हें एक की आवश्यकता क्यों है। जटिलता की समस्याएं जो हल करती हैं वे आम तौर पर खिलौनों के अनुप्रयोगों में मौजूद नहीं होती हैं। – Anthony

+0

मैं सहमत हूं और असहमत हूं: स्वतंत्र टुकड़े अलगाव में समझना आसान है। लेकिन पूरी तस्वीर और तारों को और अधिक dificuilt है। उदाहरण: आप उस सेवा का स्रोत कोड पढ़ रहे हैं जो एक रिपोजिटरी-सेव विधि को कॉल करता है। मैं आपके संपादक को "सहेजने की गेटो परिभाषा" पूछता हूं, आप इंटरफ़ेस परिभाषा में समाप्त होते हैं लेकिन कंक्रीट कार्यान्वयन में नहीं। – k3b

+0

@ k3b: निश्चित रूप से, आपको नलसाजी के बारे में भी ध्यान रखना होगा ... लेकिन मुझे नहीं लगता कि यह एक दूसरे के लिए अलग-अलग सेवाओं को कसकर जोड़ने के लिए पर्याप्त बाधा है। आपके उत्तर में बहुत सामान्य ज्ञान के लिए –

3

मैं अब तक सभी उत्तरों से सहमत हूं।

मैं जो जोड़ना चाहता हूं, वह यह है कि यह थोड़ा ओवरहेड बनाता है, इसलिए यह वास्तव में छोटे अनुप्रयोगों के लिए उपयुक्त नहीं है।

मध्य आकार और बड़े अनुप्रयोगों को आईओसी का उपयोग करने से सबसे ज्यादा फायदा होता है।

तुम भी पक्ष-विपक्ष के बारे में अधिक जानकारी के लिए इस सवाल की जाँच हो सकता है: Castle Windsor Are There Any Downsides?

3

मेरा मानना ​​है कि कम निष्पादन की गति के बारे में धारणा ज्यादा तर्क का एक ही प्रकार के रूप में "सी से सी #/जावा तेजी से होता है" है। हालांकि यह कथन विशिष्ट संचालन और/या संरचनात्मक रूप से सरल कार्यों के लिए सच हो सकता है, यह क्षण जटिलता के मामले में नहीं है।

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

उन्नत डी कंटेनर आपको "स्कोप" जादू भी देता है जिसे आप केवल कंटेनर के बिना सपने देख सकते हैं। गुंजाइश-प्रॉक्सी का उपयोग करना, spring निम्न कर सकते हैं:

A Singleton 
| 
B Singleton 
| 
C Prototype (per-invocation) 
| 
D Singleton 
| 
E Session scope (web app) 
| 
F Singleton 

प्रभावी ढंग से आप सिंगलटन वस्तुओं की दस परतों और अचानक कुछ सत्र के सभी हो सकता है scoped दिखाता है।

सुरक्षा जैसी सामग्री को अन्यथा की तुलना में बिल्कुल अलग तरीके से इंजेक्शन दिया जा सकता है। अक्सर शास्त्रीय विरोधाभास होता है: अक्सर जीयूआई परत को सुरक्षा अनुमतियों के जटिल ज्ञान की आवश्यकता होती है। अक्सर सेवा परत को भी इसकी आवश्यकता होती है, लेकिन अक्सर एक अलग स्तर पर विस्तार (आमतौर पर गुई से कम विस्तृत) पर। शास्त्रीय दृष्टिकोण इसे पैरामीटर के रूप में भेजने के लिए, इसे थ्रेडलोकल पर रखकर या सेवा पूछने के लिए होगा। वसंत के साथ आप इसे केवल इंजेक्ट कर सकते हैं जहां आपको इसकी आवश्यकता है और किसी और को जानने की जरूरत नहीं है।

यह वास्तव में संपूर्ण रूप से एप्लिकेशन विकास को बदलता है। मेरे पास इस पर समायोजन करने में एक कठिन कठिन समय था, लेकिन इस दर्द के बाद मुझे लगता है कि यह वास्तव में चीजों के बारे में बहुत करीब है (जैसा कि हमने इसे करने के लिए सीखा है)।

तो मुझे लगता है कि डी ढांचे के पास प्रोग्राम बनाने के तरीके को बदलने की क्षमता है, केवल डीआई की तुलना में बहुत अधिक प्रभावकारी प्रभावों के साथ। यह नया पर कॉल करने का एक गौरवशाली तरीका नहीं है।

6

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

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

मैं आईओसी को केक पर टुकड़े करने के रूप में देखता हूं; मुझे टुकड़े करना पसंद है लेकिन केवल एक अच्छे केक पर। यदि केक शुरू करने के लिए अच्छा नहीं है, तो पहले केक को सॉर्ट करें।

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

1

यदि आप एक इनवर्जन-ऑफ-कंट्रोल और निर्भरता-इंजेक्शन कंटेनर (अन्य फुर्तीली प्रथाओं और औजारों के संयोजन के साथ) का उपयोग करके व्यवसाय अनुप्रयोग लिख रहे हैं, तो उत्पादकता और विश्वसनीयता के संदर्भ में आपकी मदद करेंगे।

इसके अलावा, आपका आवेदन शायद संसाधनों की प्रतीक्षा करने या मानव संपर्क की प्रतीक्षा करने और कुछ भी उपयोगी नहीं करने के लिए अपने CPU समय का एक विशाल बहुमत खर्च करेगा। आपके आवेदन में प्रतिबिंब के कुछ माइक्रोसेकंड के लिए अतिरिक्त हॉर्स पावर होना चाहिए।

+0

+1। –

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

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