2011-08-12 4 views
6

मैं हाल ही में एक टीम से निर्भरता इंजेक्शन के लिए एएसपी.NET एमवीसी में निनजेक्ट का उपयोग करके एक टीम से चला गया है जो एएसपी.Net 2.0 में पेश किए गए प्रदाता मॉडल पैटर्न के अलावा आईओसी समाधान के कुछ भी नहीं जानता है।एक ग्रीनफील्ड एएसपी.NET एमवीसी ऐप में प्रदाता मॉडल का उपयोग क्यों पीछे की ओर महसूस करता है?

मैंने प्रदाता मॉडल के साथ काम करने के लिए एक अच्छा वर्कफ़्लो खोजने की कोशिश की है, लेकिन हर बार जब मुझे वास्तव में कोडिंग मिलती है, तो यह मुख्य रूप से लगता है कि पैटर्न रास्ते में हो रहा है और ऐसा लगता है जैसे मैं कॉन्फ़िगरेशन गेटचास और कोबलिंग को विचलित कर रहा हूं एक साथ copypasta स्थिर facades जब मैं इसके बजाय काम किया जा सकता है।

अब मैं एक छोटा एएसपी.NET एमवीसी ग्रीनफील्ड प्रोजेक्ट शुरू कर रहा हूं, और डीआई फ्रेमवर्क को अपनाने के लिए टीम के कुछ सदस्यों से प्रतिरोध ढूंढ रहा हूं।

मुझे पता है कि डी ढांचे प्रदाता मॉडल के खिलाफ लिखने से तेज़ और आसान महसूस करते हैं, लेकिन हर बार जब मैं स्पष्ट करने की कोशिश करता हूं तो विवरण में फंस जाता हूं।

क्या कोई भी दो दृष्टिकोणों के बीच उद्देश्य अंतर का वर्णन कर सकता है और एक ऐसे वातावरण में प्रदाता मॉडल के खिलाफ क्यों लिख रहा है जहां एक कंटेनर आसानी से बूटस्ट्रैप हो सकता है, बस अजीब लगता है?

+0

क्या एक ग्रीनफील्ड परियोजना है, बस उत्सुक –

+0

ग्रीनफील्ड बनाई गई कुछ भी नहीं के साथ एक नई परियोजना का मतलब है। –

+2

आपका क्या मतलब है, "प्रदाता मॉडल के खिलाफ लिखना"? मेरा होगया ।एनईटी 1 दिन से, और मेरे ज्ञान के सर्वोत्तम में कभी भी "प्रदाता मॉडल के खिलाफ लिखा नहीं है"। –

उत्तर

2

Provider idiom is, at best, a design smell। इसे पूरी तरह से टालना सबसे अच्छा है।

दूसरी ओर निर्भरता इंजेक्शन, the most efficient way to enable loose coupling है। यदि आप लिखने योग्य कोड लिखना चाहते हैं, तो यह लक्ष्य प्राप्त करने के सबसे प्रभावी तरीकों में से एक है।

हालांकि, अधिकांश लोग DI का प्रतिरोध करते हैं क्योंकि यह पीछे की ओर 'महसूस करता है', लेकिन यह वास्तव में कुछ पाने की आवश्यकता है।

1

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

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

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

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

मेरे ब्लॉग पोस्ट पर और अधिक पढ़ें - उम्मीद है कि ब्लॉग इसके बारे में कुछ अच्छी टिप्पणी भी मिल जाएगा: http://healthedev.blogspot.com/2011/12/making-custom-built-applications.html