dependency injection का मतलब है कि कोई component अपने साथी खुद बनाने के बजाय बाहर से पाता है। यह coupling की समस्या हल करती है: अगर कोई class अपना डेटाबेस client खुद बनाती है, तो आप उसे न बदल सकते हैं, न अलग करके टेस्ट कर सकते हैं, न उसकी उम्र पर काबू रख सकते हैं। constructor के जरिए dependencies अंदर भेजने से वे साफ दिखती हैं, class ईमानदारी से बता देती है कि वह किन चीजों को छूती है, और आप टेस्ट में नकली या हर environment में अलग implementation दे सकते हैं।
इंटरव्यूअर यह क्यों पूछते हैं
यह जांचता है कि आप सिद्धांत समझते हैं या बस किसी framework का annotation इस्तेमाल करते हैं। इंटरव्यूअर coupling और testability वाली दलील चाहते हैं, यह समझ कि constructor के parameters ही class की असली dependencies का दस्तावेज हैं, और वह परिपक्वता कि आप कह सकें कि इसके लिए container जरूरी नहीं। जो कैंडिडेट किसी framework का नाम लिए बिना फायदा नहीं समझा पाते, उन्होंने आम तौर पर वह तकलीफ महसूस ही नहीं की जिसे यह ठीक करती है।
अपना जवाब कैसे स्ट्रक्चर करें
- इसे यूं परिभाषित कीजिए कि साथी बनाए नहीं जाते, अंदर भेजे जाते हैं।
- दो फायदे गिनाइए: testability और बदल पाने की सहूलियत।
- बताइए कि इसके लिए framework नहीं, सिर्फ constructor parameters चाहिए।
- एक उदाहरण दीजिए जहां इसने आपका असली वक्त बचाया।
उदाहरण जवाब
इसका मतलब बस इतना है कि class को जो चाहिए वह उसे थमा दिया जाता है, वह खुद नहीं बनाती। अगर मेरी order service constructor में अपना Postgres client बनाती है, तो वह Postgres से और environment में पड़ी किसी भी connection string से चिपक जाती है, और उस class का हर टेस्ट अब integration test बन जाता है। अगर वह constructor parameter के तौर पर एक repository interface लेती है, तो मैं प्रोडक्शन में असली और टेस्ट में in memory वाला भेज देता हूं, और class को फर्क ही नहीं पड़ता। जिस फायदे की कद्र मुझे वक्त के साथ ज्यादा हुई है वह ईमानदारी है: constructor की signature ठीक ठीक बता देती है कि यह चीज क्या क्या छूती है, तो जब कोई class सात dependencies लेती है तो वह डिजाइन की बदबू आपको दिख जाती है, ढूंढने नहीं जाना पड़ता। मैं यह साफ करना चाहूंगा कि मेरे हिसाब से container जरूरी नहीं है। छोटी सर्विसेज में मैं सब कुछ एक composition file में हाथ से जोड़ता हूं, और वही file सिस्टम का नक्शा बन जाती है। frameworks तब मदद करते हैं जब यह जोड़ना उबाऊ हो जाए, उससे पहले नहीं।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- DI container कब उतनी जटिलता घटाने के बजाय बढ़ा देता है?
- inject की गई dependency की उम्र आप कैसे संभालते हैं?
- यह service locator pattern से कैसे अलग है?
सॉफ्टवेयर इंजीनियर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें