मैं यह जानने की कोशिश करूंगा कि आईओसी मेरे नजरिए से अच्छा क्यों नहीं हो सकता है।
सब कुछ के साथ के रूप में, IOC कंटेनर (या जैसा कि आइंस्टीन इसे I = OC ^ 2 होगा) एक अवधारणा है जिसे आपको अपने लिए तय करना होगा कि आपको इसकी आवश्यकता है या नहीं। हाल ही में आईओसी के बारे में फैशन आउटरीच केवल यही है, फैशन। फैशन के लिए मत गिरो, वह पहले है। वहाँ अवधारणाओं के असंख्य हैं वहाँ आप अपने कोड में लागू कर सकते हैं। सबसे पहले, मैं निर्भरता इंजेक्शन का उपयोग कर रहा हूं क्योंकि मैंने प्रोग्रामिंग शुरू कर दी है, और इस शब्द के तहत लोकप्रिय होने पर शब्द ही सीखा है। निर्भरता नियंत्रण एक बहुत पुराना विषय है और इसे अब तक खरबों तरीकों से संबोधित किया गया है, जो इस बात पर निर्भर करता है कि किस चीज से क्या डिकॉय किया गया था। हर चीज को हर चीज से अलग करना एक बकवास है। IOC कंटेनर के साथ समस्या यह है कि यह Entity Framework या NHibernate जितना उपयोगी है। ऑब्जेक्ट-रिलेशनल मैपर लिखते समय बस इतना ही करना चाहिए जैसे ही आपको अपने सिस्टम के साथ किसी भी डेटाबेस को जोड़ना है, आईओसी कंटेनर हमेशा आवश्यक नहीं है। इसलिए जब IOC कंटेनर उपयोगी हो:
- जब आपके पास कई निर्भरताओं के साथ एक स्थिति है जिसे आप व्यवस्थित करना चाहते हैं
- जब आप अपने कोड को तीसरे पक्ष के उत्पाद के साथ युग्मित करने की परवाह नहीं करते हैं
- जब आपके डेवलपर्स सीखना चाहते हैं कि नए टूल के साथ कैसे काम करें
1: ऐसा नहीं है कि अक्सर आपके पास अपने कोड में बहुत अधिक निर्भरता होती है, या आप उन्हें डिजाइन के बारे में जल्दी जानते हैं। सार सोच के कारण सार सोच उपयोगी है।
2: अपने कोड को तृतीय-पक्ष कोड के साथ युग्मित करना एक HuGe समस्या है। मैं उस कोड के साथ काम कर रहा था जो 10+ वर्ष पुराना है और उस समय फैंसी और उन्नत अवधारणाओं ATL, COM, COM + इत्यादि का अनुसरण कर रहा था। अब आप उस कोड के साथ कुछ भी नहीं कर सकते हैं। मैं जो कह रहा हूं वह यह है कि एक उन्नत अवधारणा एक स्पष्ट लाभ देती है, फिर भी यह लंबे समय तक पुराने लाभ के साथ ही रद्द कर दिया जाता है। यह सिर्फ यह सब और अधिक महंगा बना दिया था।
3: सॉफ्टवेयर विकास काफी कठिन है। यदि आप कुछ उन्नत अवधारणा को अपने कोड में क्रॉप करने देते हैं तो आप इसे पहचानने योग्य स्तर तक बढ़ा सकते हैं। IOC2 के साथ एक समस्या है। हालाँकि यह निर्भरता को कम कर रहा है, यह तर्क प्रवाह को भी कम कर रहा है। कल्पना कीजिए कि आपको एक बग मिल गया है और आपको स्थिति की जांच करने के लिए एक ब्रेक सेट करने की आवश्यकता है। IOC2, किसी भी अन्य उन्नत अवधारणा के रूप में, इसे और अधिक कठिन बना रहा है। एक अवधारणा के भीतर बग को ठीक करना एक सादे कोड में बग को ठीक करने की तुलना में अधिक कठिन है, क्योंकि जब आप बग को ठीक करते हैं तो एक अवधारणा को फिर से पालन करना होगा। (बस आपको एक उदाहरण देने के लिए, C ++ .NET सिंटैक्स को लगातार इतना बदल रहा है कि आपको .NET के कुछ पुराने संस्करण को रिफलेक्टर करने से पहले आपको कठिन सोचने की आवश्यकता है।) तो IOC के साथ समस्या क्या है? समस्या निर्भरता को हल करने में है। हल करने का तर्क आमतौर पर IOC2 में ही छिपा होता है, शायद असामान्य तरीके से लिखा जाए जिसे आपको सीखने और बनाए रखने की आवश्यकता है। क्या आपका तृतीय-पक्ष उत्पाद 5 वर्षों में होगा? Microsoft का नहीं था।
"हम जानते हैं कि कैसे" IOC2 के बारे में सभी जगह सिंड्रोम लिखा गया है। यह स्वचालन परीक्षण के समान है। पहली नज़र में फैंसी शब्द और सही समाधान, आप बस रात को निष्पादित करने और सुबह परिणाम देखने के लिए अपने सभी परीक्षण डालते हैं। कंपनी के बाद कंपनी की व्याख्या करना वास्तव में दर्दनाक है कि स्वचालित परीक्षण का वास्तव में क्या मतलब है। स्वचालित परीक्षण निश्चित रूप से बग की संख्या को कम करने का एक त्वरित तरीका नहीं है जिसे आप अपने उत्पाद की गुणवत्ता बढ़ाने के लिए रात भर में पेश कर सकते हैं। लेकिन, फैशन उस धारणा को कष्टप्रद बना रहा है। IOC2 एक ही सिंड्रोम से ग्रस्त है। यह माना जाता है कि आपके सॉफ़्टवेयर को अच्छा बनाने के लिए आपको इसे लागू करने की आवश्यकता है। हाल ही में साक्षात्कार से पूछा गया कि क्या मैं IOC2 और स्वचालन को लागू कर रहा हूं। यह फैशन का संकेत है: कंपनी के पास MFC में लिखे गए कोड का कुछ हिस्सा था जिसे वे नहीं छोड़ेंगे।
आपको IOC2 को सॉफ़्टवेयर में किसी अन्य अवधारणा के रूप में सीखना होगा। यदि IOC2 का उपयोग करने की आवश्यकता है तो निर्णय टीम और कंपनी के भीतर है। हालाँकि, निर्णय किए जाने से पहले कम से कम सभी उपरोक्त तर्कों का उल्लेख किया जाना चाहिए। केवल अगर आप देखते हैं कि प्लस साइड नकारात्मक पक्ष से आगे निकल जाता है, तो आप सकारात्मक निर्णय ले सकते हैं।
IOC2 के साथ कुछ भी गलत नहीं है, सिवाय इसके कि यह केवल उन समस्याओं को हल करता है जो इसे हल करती है और उन समस्याओं का परिचय देती है जो इसे प्रस्तुत करती है। और कुछ नहीं। हालांकि, फैशन के खिलाफ जाना बहुत मुश्किल है, उनके पास पसीना है, किसी भी चीज के अनुयायी। यह अजीब है कि उनमें से कोई भी कैसे नहीं है जब उनके बेहोशी के साथ समस्या स्पष्ट हो जाती है। सॉफ्टवेयर उद्योग में कई अवधारणाओं का बचाव किया गया है क्योंकि वे लाभ पैदा करते हैं, किताबें लिखी जाती हैं, सम्मेलन आयोजित किए जाते हैं, नए उत्पाद बनाए जाते हैं। यह फैशन है, आमतौर पर कम रहता है। जैसे ही लोगों को कुछ और मिलता है वे इसे पूरी तरह से त्याग देते हैं। IOC2 उपयोगी है लेकिन यह वही संकेत दिखाता है जो मैंने देखा है कई अन्य गायब हो गए हैं। मुझे नहीं पता कि यह बच पाएगा या नहीं। उसके लिए कोई नियम नहीं है। आपको लगता है कि अगर यह उपयोगी है, तो यह जीवित रहेगा। नहीं, यह उस तरह से नहीं जाता है। एक बड़ी समृद्ध कंपनी पर्याप्त है और अवधारणा कुछ हफ्तों के भीतर मर सकती है। हम देखेंगे। NHibernate बच गया, EF दूसरे स्थान पर आया। शायद IOC2 भी बच जाएगा। यह मत भूलो कि सॉफ्टवेयर विकास में अधिकांश अवधारणाएं कुछ खास नहीं हैं, वे बहुत तार्किक, सरल और स्पष्ट हैं, और कभी-कभी वर्तमान नामकरण सम्मेलन को याद रखना अधिक कठिन होता है, क्योंकि यह अवधारणा को समझने के लिए ही है। क्या IOC2 का ज्ञान किसी डेवलपर को बेहतर डेवलपर बनाता है? नहीं, क्योंकि अगर कोई डेवलपर IOC2 की प्रकृति के समान अवधारणा के साथ आने में सक्षम नहीं था, तो उसके लिए यह समझना मुश्किल होगा कि IOC2 किस समस्या को हल कर रहा है, इसका उपयोग करना कृत्रिम लगेगा और वह इसका उपयोग करना शुरू कर सकता है राजनीतिक रूप से सही होने के लिए। यह मत भूलो कि सॉफ्टवेयर विकास में अधिकांश अवधारणाएं कुछ खास नहीं हैं, वे बहुत तार्किक, सरल और स्पष्ट हैं, और कभी-कभी वर्तमान नामकरण सम्मेलन को याद रखना अधिक कठिन होता है, क्योंकि यह अवधारणा को समझने के लिए ही है। क्या IOC2 का ज्ञान किसी डेवलपर को बेहतर डेवलपर बनाता है? नहीं, क्योंकि अगर कोई डेवलपर IOC2 की प्रकृति के समान अवधारणा के साथ आने में सक्षम नहीं था, तो उसके लिए यह समझना मुश्किल होगा कि IOC2 किस समस्या को हल कर रहा है, इसका उपयोग करना कृत्रिम लगेगा और वह इसका उपयोग करना शुरू कर सकता है राजनीतिक रूप से सही होने के लिए। यह मत भूलो कि सॉफ्टवेयर विकास में अधिकांश अवधारणाएं कुछ खास नहीं हैं, वे बहुत तार्किक, सरल और स्पष्ट हैं, और कभी-कभी वर्तमान नामकरण सम्मेलन को याद रखना अधिक कठिन होता है, क्योंकि यह अवधारणा को समझने के लिए ही है। क्या IOC2 का ज्ञान किसी डेवलपर को बेहतर डेवलपर बनाता है? नहीं, क्योंकि अगर कोई डेवलपर IOC2 की प्रकृति के समान अवधारणा के साथ आने में सक्षम नहीं था, तो उसके लिए यह समझना मुश्किल होगा कि IOC2 किस समस्या को हल कर रहा है, इसका उपयोग करना कृत्रिम लगेगा और वह इसका उपयोग करना शुरू कर सकता है राजनीतिक रूप से सही होने के लिए। क्या IOC2 का ज्ञान किसी डेवलपर को बेहतर डेवलपर बनाता है? नहीं, क्योंकि अगर कोई डेवलपर IOC2 की प्रकृति के समान अवधारणा के साथ आने में सक्षम नहीं था, तो उसके लिए यह समझना मुश्किल होगा कि IOC2 किस समस्या को हल कर रहा है, इसका उपयोग करना कृत्रिम लगेगा और वह इसका उपयोग करना शुरू कर सकता है राजनीतिक रूप से सही होने के लिए। क्या IOC2 का ज्ञान किसी डेवलपर को बेहतर डेवलपर बनाता है? नहीं, क्योंकि अगर कोई डेवलपर IOC2 की प्रकृति के समान अवधारणा के साथ आने में सक्षम नहीं था, तो उसके लिए यह समझना मुश्किल होगा कि IOC2 किस समस्या को हल कर रहा है, इसका उपयोग करना कृत्रिम लगेगा और वह इसका उपयोग करना शुरू कर सकता है राजनीतिक रूप से सही होने के लिए।