इसके बारे में क्या?
class Employee {
private Address address;
// constructor
public Employee(Address newAddress) {
this.address = newAddress;
}
public Address getAddress() {
return this.address;
}
public void setAddress(Address newAddress) {
this.address = newAddress;
}
}
सब कुछ अब तक ठीक लग रहा है:
आप एक वर्ग Employee
है और इस कर्मचारी एक Address
है तो वह Employee
वर्ग इस प्रकार के रूप में परिभाषित कर सकते हैं।
यह कोड एचएएस-ए कर्मचारी और उसके पते के बीच संबंध दिखाता है, यह ठीक है।
अब, यह HAS-A संबंधों के बीच एक निर्भरता पैदा हुई। समस्या कन्स्ट्रक्टर के भीतर आता है।
Address someAddress = ....
Employee oscar = new Employee(someAddress);
इस तरह से काम कर रहे समस्याग्रस्त हो जाता है विशेष रूप से आप इकाई परीक्षण प्रदर्शन करने के लिए चाहते हैं जब:
हर बार जब आप एक Employee
उदाहरण बनाना चाहते हैं तो आप एक Address
उदाहरण की जरूरत है।
मुख्य समस्या तब होती है जब आपको किसी विशेष वस्तु का परीक्षण करने की आवश्यकता होती है, आपको अन्य ऑब्जेक्ट का एक उदाहरण बनाने की आवश्यकता होती है, और संभवत: आपको ऐसा करने के लिए अन्य ऑब्जेक्ट बनाने की आवश्यकता है। श्रृंखला अप्रबंधनीय हो सकती है।एक नहीं args निर्माता का उपयोग करना
public Employee(){
}
:
इससे बचने के लिए आप इस तरह निर्माता बदल सकता है।
तो फिर तुम पता सेट कर सकते हैं जब कभी आप चाहते हैं:
Address someAddress = ....
Employee oscar = new Employee();
oscar.setAddress(someAddress);
अब, यह एक खींचें हो सकता है, अगर आपके पास कई गुण या वस्तुओं को बनाने के लिए कड़ी मेहनत कर रहे हैं।
फिर भी, इस बारे में सोचते, मान लें, तो आप Department
विशेषता जोड़ें: आप 300 कर्मचारी हैं, तो और उन सभी ही विभाग की आवश्यकता है, और अधिक है कि एक ही विभाग
class Employee {
private Address address;
private Department department;
....
कुछ अन्य वस्तुओं (जैसे विभागों की कंपनी सूची, या प्रत्येक विभाग की भूमिका आदि) के बीच साझा किया जाना है, तो आपको Department
ऑब्जेक्ट की दृश्यता के साथ कठिन समय होगा और वस्तुओं के सभी नेटवर्क के माध्यम से इसे साझा करना होगा।
क्या निर्भरता इंजेक्शन सब के बारे में यह मदद करने के लिए आप के लिए, ठीक है, अपने कोड में ये निर्भरता "इंजेक्षन" है। अधिकांश ढांचे आपको बाहरी फाइल में निर्दिष्ट करके ऐसा करने की अनुमति देते हैं, किस वस्तु को इंजेक्शन दिया जाना है।
मान लें एक गुण एक काल्पनिक निर्भरता इंजेक्टर के लिए फ़ाइल:
#mock employee
employee.address = MockAddress.class
employee.department = MockDepartment.class
#production setup
employee.address = RealAddress.class
employee.department = RealDepartment.class
आप क्या किसी दिए गए परिदृश्य के लिए सुई को परिभाषित करेंगे।
निर्भरता इंजेक्टर फ्रेमवर्क आपके लिए सही ऑब्जेक्ट्स सेट करने के लिए क्या करेगा, इसलिए आपको setAddress
या setDepartment
कोड कोड करने की आवश्यकता नहीं है। यह प्रतिबिंब या कोड पीढ़ी या अन्य तकनीकों द्वारा किया जाएगा।
तो, अगली बार जब आप पूरी तरह से तैयार कोड करने के लिए/अपने सभी परीक्षण के लिए प्राप्त किए बिना Employee
वर्ग आप नकली Address
और Departments
वस्तुओं इंजेक्षन सकता है परीक्षण करने के लिए की जरूरत है। इससे भी बेहतर, आप उत्पादन कोड में वास्तविकAddress
और Department
ऑब्जेक्ट इंजेक्ट कर सकते हैं, और अभी भी आपके कोड को परीक्षण के रूप में विश्वास है।
यह इसके बारे में काफी कुछ है।
फिर भी मुझे नहीं लगता कि यह स्पष्टीकरण आपके अनुरोध के अनुसार 5 वर्ष पुराने के लिए उपयुक्त है।
मुझे आशा है कि आपको अभी भी यह उपयोगी लगेगा।
उस बच्चे की तरह कठिन जीवन के लिए लगता है ... –
"एक बार एक समय ....." के साथ शुरू करें – Martin
उसे निर्भरता इंजेक्शन या प्रोग्रामिंग से संबंधित कुछ भी नहीं सिखाएं ...... उसे आनंद लें जीवन – Xinus