सिस्टम को डिजाइन करते समय मुझे अक्सर अन्य मॉड्यूल द्वारा उपयोग किए जा रहे मॉड्यूल (लॉगिंग, डेटाबेस एसेस, आदि) का एक गुच्छा होने की समस्या का सामना करना पड़ता है। सवाल यह है कि मैं इन घटकों को अन्य घटकों को प्रदान करने के बारे में कैसे जाऊँ। दो जवाब संभव निर्भरता इंजेक्शन या कारखाने पैटर्न का उपयोग कर लगते हैं। हालाँकि दोनों गलत लगते हैं:
- इकाइयां एक दर्द का परीक्षण करती हैं और कार्यान्वयन की आसान अदला-बदली की अनुमति नहीं देती हैं। वे भी निर्भरता को स्पष्ट नहीं करते हैं (जैसे कि आप एक विधि की जांच कर रहे हैं, इस तथ्य से बेखबर है कि यह एक विधि को कहता है जो एक विधि को कॉल करता है जो एक डेटाबेस का उपयोग करता है)।
- डिपेंडेसी इंजेक्शन बड़े पैमाने पर कंस्ट्रक्टर तर्क सूचियों को सूजता है और यह आपके कोड में कुछ पहलुओं को स्मीयर करता है। विशिष्ट स्थिति वह है जहां आधे से अधिक वर्गों के निर्माता इस तरह दिखते हैं
(....., LoggingProvider l, DbSessionProvider db, ExceptionFactory d, UserSession sess, Descriptions d)
यहां एक विशिष्ट स्थिति है जिसके साथ मुझे एक समस्या है: मेरे पास अपवाद वर्ग हैं, जो डेटाबेस से लोड की गई त्रुटि विवरण का उपयोग करते हैं, एक क्वेरी का उपयोग करते हैं जिसमें उपयोगकर्ता भाषा सेटिंग का पैरामीटर है, जो उपयोगकर्ता सत्र ऑब्जेक्ट में है। इसलिए एक नया अपवाद बनाने के लिए मुझे एक विवरण की आवश्यकता है, जिसके लिए डेटाबेस सत्र और उपयोगकर्ता सत्र की आवश्यकता है। इसलिए मुझे इन सभी वस्तुओं को अपने सभी तरीकों में खींचने के लिए बर्बाद किया जाता है, अगर मुझे अपवाद को फेंकने की आवश्यकता होती है।
मैं इस तरह की समस्या से कैसे निपटूं ??