मेरे पास बहुत सारे "एंटी-पैटर्न" सिंगलेट्स के साथ एक बड़ा कोडबेस है, स्टेटिक तरीकों के साथ यूटिलिटी क्लासेस और new
कीवर्ड का उपयोग करके अपनी खुद की निर्भरता पैदा करने वाली कक्षाएं । यह परीक्षण करने के लिए एक कोड को बहुत कठिन बनाता है।
मैं धीरे-धीरे कोड को निर्भरता इंजेक्शन कंटेनर में स्थानांतरित करना चाहता हूं (मेरे मामले में यह है Guice
, क्योंकि यह एक GWT
परियोजना है)। निर्भरता इंजेक्शन की मेरी समझ से, यह सब या कुछ भी नहीं है। या तो सभी कक्षाएं स्प्रिंग / गाइस द्वारा प्रबंधित की जाती हैं या कोई भी नहीं। चूंकि कोडबेस बड़ा है इसलिए मैं रात में कोड को रूपांतरित नहीं कर सकता। इसलिए मुझे इसे धीरे-धीरे करने का एक तरीका चाहिए।
समस्या यह है कि जब मैं एक ऐसे वर्ग से शुरू करता हूं जिसे अन्य वर्गों में इंजेक्ट करने की आवश्यकता होती है, तो मैं @Inject
उन वर्गों में एक सरल का उपयोग नहीं कर सकता , क्योंकि उन वर्गों को अभी तक कंटेनर द्वारा प्रबंधित नहीं किया गया है। तो यह "टॉप" वर्गों तक एक लंबी श्रृंखला बनाता है जो कहीं भी इंजेक्ट नहीं होते हैं।
एकमात्र तरीका जो मैं देख रहा हूं, वह Injector
एक सिंगलटन के माध्यम से विश्व स्तर पर / समय के लिए उपलब्ध होने का संदर्भ देता है, ताकि अन्य वर्गों को इससे प्रबंधित फल मिल सकें। लेकिन यह composition root
आवेदन का खुलासा नहीं करने के महत्वपूर्ण विचार का खंडन करता है।
एक और दृष्टिकोण नीचे-ऊपर होगा: "उच्च-स्तरीय" कक्षाओं के साथ शुरू करने के लिए, उन्हें निर्भरता इंजेक्शन कंटेनर में शामिल करें और धीरे-धीरे "छोटे" वर्गों में चले जाएं। लेकिन फिर मुझे लंबे समय तक इंतजार करना होगा, क्योंकि मैं उन छोटी कक्षाओं का परीक्षण कर सकता हूं जो अभी भी ग्लोबल्स / स्टेटिक्स पर निर्भर हैं।
ऐसे क्रमिक प्रवासन को प्राप्त करने का तरीका क्या होगा?
पुनश्च निर्भरता इंजेक्शन के लिए क्रमिक दृष्टिकोण शीर्षक के समान है, लेकिन यह मेरे प्रश्न का उत्तर नहीं देता है।