मैं जावा डेवलपर हूं जो निर्भरता इंजेक्शन की पूरी शक्ति को समझने के लिए से शुरू होता है, और अचानक यह मुझ पर आ गया कि स्थिर विधि को इंजेक्ट करने का कोई तरीका नहीं है। तो यह मुझे सोच गया: स्थैतिक तरीकों डी विरोधी पैटर्न हैं?स्थिर विधियां एक डीआई विरोधी पैटर्न हैं?
अधिक महत्वपूर्ण बात: अगर मैं निर्भरता इंजेक्शन को गले लगाने के लिए था, तो क्या इसका मतलब है कि मुझे स्थैतिक तरीकों को कोड करना बंद करना होगा? मैं पूछता हूं क्योंकि यूनिट परीक्षणों के दौरान उन्हें नकली करने और नकली सांख्यिकी को इंजेक्ट करने का कोई तरीका नहीं है, जो मेरे लिए एक बड़ा मोड़ है।
संपादित: मुझे पता है कि एक आम तरीका है "रैप" और इंजेक्षन एक मौजूदा स्थिर विधि इस तरह है:
public class Foo {
public static void bar() { ... }
}
public interface FooWrapper {
public void bar();
}
public class FooWrapperImpl implements FooWrapper {
public void bar() {
return Foo.bar();
}
}
... लेकिन मैं नहीं पूछ रहा हूँ कि कैसे एक मौजूदा स्थिर सुई विधि ... मैं पूछ रहा हूं कि मुझे उन्हें पूरी तरह लिखना बंद कर देना चाहिए, अगर मेरा पूरा कोड (इस बिंदु से आगे) DI की धारणा को गले लगाने जा रहा है।
इसके अलावा, मुझे इस तरह के बहुत से संबंधित प्रश्न दिखाई देते हैं, लेकिन एक ही प्रश्न पूछने वाले सटीक मैच को नहीं मिला। यदि आप देखते हैं कि यह वास्तव में किसी अन्य प्रश्न का डुप्लिकेट है, तो कृपया मुझे यह इंगित करें और मैं स्वयं इस प्रश्न को बंद कर दूंगा (कृपया इसे बंद न करें!)।
तो मैं एक विधि 'सीटी()' कहा जाता है और उस में मैं एक 'Widget.buzz()' विधि है, जो एक डेटाबेस हिट और अपने स्थानीय फाइल सिस्टम में परिवर्तन के सभी प्रकार में आता है करने के लिए एक स्थिर फोन करना है, तो मैं 'widget.buzz()' को कॉल करके लाए गए सभी बड़े बदलावों का आह्वान किए बिना 'fizz() 'का परीक्षण कैसे करूं? मेरा मुद्दा यह है कि, मुझे लगता है कि मुझे स्थैतिक विधि को पूरी तरह से लिखना बंद करना चाहिए, ताकि मैं उस सही 'विजेट' ऑब्जेक्ट (सामान्य बनाम नकली) को इंजेक्ट कर सकूं और फिर रनटाइम पर 'buzz()' आग के "संस्करण" को नियंत्रित कर सकूं। विचार? – IAmYourFaja
'Widget.buzz()' स्थिर स्थिति - डेटाबेस, और स्पष्ट रूप से, संपूर्ण फाइल सिस्टम से जुड़ा हुआ है। वह बुरा है। 'fizz'' विजेट 'तर्क ले सकता है, और आप' fizz' का परीक्षण करने के लिए 'विजेट' का मज़ाक उड़ाएंगे। –
अहह, मैंने डेटाबेस या फाइल सिस्टम को राज्य के रूप में कभी नहीं सोचा था। "सतर्कता" को परिभाषित करने के लिए आप किस मानदंड का उपयोग करते हैं? मुझे लगता है कि यह मेरी गलतफहमी की जड़ है। – IAmYourFaja