पाठ 28 / 38

डिपेंडेंसी इंजेक्शन क्या हल करता है

`new` से मैनुअल ऑब्जेक्ट वायरिंग से बनने वाली कड़ी coupling व अ-टेस्ट योग्य कोड देखें, और कंस्ट्रक्टर से dependency इंजेक्ट करना दोनों को कैसे ठीक करता है।

अपने औज़ार खुद मत बनाओ

एक बढ़ई अपना हथौड़ा खुद नहीं बनाता — उसे थमाया जाता है। किसी क्लास को भी अपने सहयोगी new से खुद नहीं बनाने चाहिए; उसे जो चाहिए वह थमाया (इंजेक्ट) जाना चाहिए, वह बस यह बताए कि उसे क्या चाहिए, कैसे बनाना है वह नहीं।

Coupling व टेस्टेबिलिटी

class OrderService { private EmailSender s = new SmtpSender(); } SmtpSender को हार्डकोड करता है — टेस्ट में नक़ली संस्करण डाल ही नहीं सकते, न ही प्रोडक्शन में provider बदल सकते हैं बिना क्लास छुए। कंस्ट्रक्टर से EmailSender इंजेक्ट करने पर टेस्ट स्टब दे सकता है और प्रोडक्शन असली।