यह एक डिजाइन निर्णय है जो काफी हद तक सामने आता है: एक विधि के माध्यम से संदर्भ को कैसे पारित किया जाए, इसके लिए किसी विधि की आवश्यकता नहीं है। क्या कोई सही उत्तर है या क्या यह संदर्भ पर निर्भर करता है।
नमूना कोड जिसमें समाधान की आवश्यकता होती है
// needs the dependency
function baz(session) {
session('baz');
}
// doesn't care about the dependency
function bar() {
baz();
}
// needs the dependency
function foo(session) {
session('foo')
bar();
}
// creates the dependency
function start() {
let session = new Session();
foo(session);
}
संभव समाधान
- threadlocal
- वैश्विक
- संदर्भ वस्तु
- के माध्यम से निर्भरता पारित करें
- करी बाज और इसे पहले आर्ग के रूप में निर्भरता सेट के साथ बार में पास करें
- निर्भरता अन्तःक्षेपण
कहां आता है इसके उदाहरण
HTTP अनुरोध प्रसंस्करण
अनुरोध विशेषताओं के रूप में संदर्भ वस्तुएं अक्सर उपयोग की जाती हैं: एक्सप्रेसज, जावा सर्वलेट्स या .net के ओवेन देखें।
लॉगिंग
जावा लॉगिंग लोक के लिए अक्सर ग्लोबल्स / सिंगलटन का उपयोग करते हैं। ठेठ log4j / कॉमन्स लॉगिंग / जावा लॉगिंग पैटर्न देखें।
लेन-देन
थ्रेड लोकल का उपयोग अक्सर लेनदेन की प्रक्रिया से जुड़े लेन-देन या सत्र को रखने के लिए किया जाता है ताकि उन्हें उन सभी विधियों के मापदंडों के रूप में पारित करने की आवश्यकता हो, जिनकी उन्हें आवश्यकता नहीं है।