Back to Question Center
0

क्लास निर्भरता प्रबंधन: निर्भरता इंजेक्शन, सर्विस लोकेटर्स और फैक्ट्रीज़, भाग 1 का परिचय            क्लास निर्भरता प्रबंधन: निर्भरता इंजेक्शन, सर्विस लोकेटर, और फैक्ट्रीज़, भाग 1 के लिए एक परिचय संबंधित शीर्ष

1 answers:
क्लास निर्भरता प्रबंधन: निर्भरता इंजेक्शन, सर्विस लोकेटर, और फैक्ट्रीज़, भाग 1 का परिचय

क्लास निर्भरता प्रबंधन: निर्भरता इंजेक्शन, सर्विस लोकेटर, और फैक्ट्रीज़ का एक परिचय

  • क्लास निर्भरता प्रबंधन: निर्भरता इंजेक्शन, सर्विस लोकेटर्स और फैक्ट्रीज़, पार्ट 1 का परिचय
  • क्लास निर्भरता प्रबंधन: निर्भरता इंजेक्शन, सर्विस लोकेटर्स और फैक्ट्रीज़, पार्ट 2 का परिचय

चलो यह सामना करें: अच्छे या बुरे के लिए, पिछले कुछ सालों में ओओपी सक्रिय रूप से पिछले कुछ सालों में PHP की मिट्टी में गहरी छेद ड्रिल कर रहा है, इसलिए अब इसकी सर्वव्यापी उपस्थिति कुछ ख़राब है लेकिन समाचार तोड़कर है। सममूल्य, जबकि भाषा के इलाके में स्थिर वृद्धिशील "ऑब्जेक्टिफिकेशन" आम तौर पर नए और अधिक होनहार क्षितिज की ओर लाभकारी बदलाव माना जाता है, क्योंकि अभी भी प्रक्रियागत प्रतिमान में निहित हैं, प्रक्रिया निर्दोष से दूर है।

इस मानसिकता को बनाए रखने वाले कुछ ठोस तर्कों को समानार्थित करें: ओओपी की प्रकृति सबसे अजीब और स्वाभाविक रूप से जटिल है, जो सूक्ष्मता से ग्रस्त होती है जो वस्तुतः वर्षों तक वश में कर सकती है। साथ ही, उन एओपीओ को परिभाषित करना जो ओ ओ घटक एक-दूसरे के साथ बातचीत करने के लिए उपयोग करते हैं, समय पर काफी बोझ हो सकता है, विशेषकर जब यह डिजाइनिंग सिस्टम की बात आती है, जिनकी रीढ़ बड़ी और गुदगुदी वस्तु ग्राफों द्वारा प्रदान की जाने वाली सुविधाओं पर निर्भर होती है।

प्रोग्रामर के परिप्रेक्ष्य में, आसानी से उपभोज्य एपीआई डिजाइन करने की प्रक्रिया में शामिल हुए वर्गों के बीच एक सभ्य स्तर के decoupling को बनाए रखना हमेशा एक मुश्किल व्यापार बंद है, क्योंकि निर्भरता अधिक निर्भरता है, काम करना कठिन होता है उनके उचित अनुक्रम में सहयोगियों को तारों के लिए परिदृश्य के पीछे किया जाना चाहिए यह तथ्य ही एक ऐसी दुविधा है जो लंबे समय से डेवलपर्स के दिमाग में गड़बड़ी की थी, जो निश्चित रूप से पचा जाता है क्योंकि समय बीतता है। आवेदन तेजी से फूला हुआ होने के साथ, अपनी सीमाओं के अंदर आवास बढ़ते वर्गों की संख्या, स्वच्छ, घोषणात्मक एपीआई का निर्माण अब सिर्फ एक ढीली अभ्यास नहीं है, जिसे अंततः समय-समय पर भाषा की मुख्यधारा में धकेल दिया जा सकता है। Semalt्ट बस एक चाहिए

इससे कुछ रोचक प्रश्न उठाए गए हैं: एक क्लास को अपनी निर्भरता के साथ अपने एपीआई को बिना किसी क्लैटरिंग के जरिए कैसे प्रदान किया जाना चाहिए, या उससे भी बदतर, यह निर्भरता स्वयं को जोड़कर बिना? बस निर्भरता इंजेक्शन के लाभों को अपील करते हुए? इंजेक्टेड सर्विस लोकेटर के शासनकाल के माध्यम से?

स्पष्ट कारणों के लिए, समस्या का समाधान करने में कोई भी एक आकार नहीं है, यहां तक ​​कि जब सभी उपर्युक्त तरीकों में कुछ समान होता है। हां, कुछ हद तक वे सबमिल्ट के कुछ प्रकार के उलटा इस्तेमाल करते हैं, जो न केवल आपको कक्षा से निर्भरता को कम करने की अनुमति देता है बल्कि निर्भरता के इंटरफेस और कार्यान्वयन के बीच इन्सुलेशन के एक निश्चित स्तर भी रखता है, मजाक / परीक्षण एक हवा का झोंका।

जाहिर है, यह विषय एक विश्व है जिसे साधारण से दूर किया जा रहा है, और जैसे कि यह एक करीबी, गहन विश्लेषण के योग्य है। इस दो-भाग की श्रृंखला में मैं कुछ सामान्य तरीकों का एक त्वरित राउंडअप करूँगा जो आधुनिक अनुप्रयोग विकास में कक्षा निर्भरताओं के प्रबंधन के लिए नियोजित किया जा सकता है, सर्विस लोकेटर और इनजेक्टेबल फैक्ट्रियों का इस्तेमाल करने से लेकर, अपने दांतों को सादे वेनिला में डूबने के लिए। निर्भरता इंजेक्शन, और यहां तक ​​कि एक सरल निर्भरता इंजेक्शन कंटेनर को लागू करने

ए (उम्मीद है) लुप्त होती प्लेग - कन्स्ट्रक्टरों में "नया" ऑपरेटर

मंत्र कुछ हद तक पुराना है, निश्चित है, लेकिन इसका दावा अभी भी जोर से और स्पष्ट है: "कन्स्ट्रक्टरों में 'नए' ऑपरेटरों को रखने से सिर्फ सादा बुराई होती है। "हम सभी जानते हैं कि अब, और यहां तक ​​कि यह भी स्वीकार करें कि हम ऐसा कोई भी प्रमुख पाप कभी नहीं करेंगे लेकिन यह सचमुच एक डिफ़ॉल्ट तरीके से इस्तेमाल किया गया था जिसका इस्तेमाल क्लास के लिए निर्भरता से पहले अपनी निर्भरता को देखने के लिए किया गया था।.

कहें कि हमें एक सरल फाइल स्टोरेज मॉड्यूल बनाने की जरूरत है जो एक विशिष्ट फ़ाइल में डेटा को पढ़ने और लिखने के लिए आंतरिक रूप से एक सीरियलइज़र का उपयोग करना चाहिए। सीरियलआइज़र के क्रियान्वयन के लिए कुछ ऐसा दिखाई देगा:

    .  

कुछ अतिरिक्त तरीकों को ध्यान में रखते हुए, जो दो पिछली कक्षाएं एक-दूसरे के साथ मिलकर काम करते हैं, में सुधार कर सकते हैं। उदाहरण के लिए, हम थोड़े बोल्डर हो सकते हैं और एक कारखाने को सीधे फाईलस्टॉरेज [internally] में डाल सकते हैं और इसे आवश्यक होने पर एक सीरियलइज़र ऑब्जेक्ट बना सकते हैं, इस प्रकार क्लास 'निर्भरता को थोड़ा अधिक स्पष्ट बनाते हैं।

इंजेक्शन फैक्ट्री के माध्यम से निर्भरता बनाने की व्यवस्था

उनके किसी भी रूप में कारखाने, निफ्टी तत्व हैं जो हमें ऑब्जेक्ट निर्माण को अनुप्रयोग तर्क से भंग करने की इजाजत देते हैं। जबकि इस तरह की क्षमता अपने आप में काफी उल्लेखनीय है, निर्भरता इंजेक्शन की भलाई के साथ मिश्रित होने पर इसे थोड़ा आगे ले जाया जा सकता है।

यदि आप उत्सुक हैं, तो मैं सोच रहा हूं कि पहले के फाईलस्टॉजेज वर्ग के अपने सहयोगी को कैसे दिखता है, इसके लिए एक फैक्ट्री द्वारा दिए गए लाभों का फायदा उठाने का तरीका क्या होगा? अपने कन्स्ट्रक्टर में कुख्यात "नया" ऑपरेटर बहुत ही बुनियादी स्तर पर, निम्नलिखित कारखाने वर्ग के माध्यम से लुकअप प्रक्रिया को दोहराया जा सकता है:

     - ssl youtube unblocker. यह कहना उचित है कि भंडारण मॉड्यूल के पुनर्संरचित कार्यान्वयन को अधिक आकर्षक लगता है; इस दृष्टिकोण से रनटाइम पर विभिन्न कारखाने के कार्यान्वयन को बाहर करने के लिए यह तुच्छ बनाता है लेकिन मेरी राय में, कम से कम इस मामले में, यह मिसाल के कानून का एक नकाबपोश उल्लंघन है क्योंकि इंजेक्टेड फैक्ट्री मॉड्यूल के असली सहयोगी को एक अनावश्यक मध्यस्थ की तरह कार्य करता है।  

इसका मतलब यह नहीं है कि इंजेक्शन कारखाने बिल्कुल बुरी चीज हैं। लेकिन ज्यादातर मामलों में उन्हें केवल मांग पर निर्भरता बनाने के लिए उपयोग किया जाना चाहिए, खासकर जब निर्भरता के जीवन चक्र क्लाइंट क्लास की तुलना में कम होते हैं तो उनका उपयोग करते हैं।

समापन टिप्पणियां

अक्सर "व्यावहारिक" विषयों के पक्ष में गलत तरीके से अनदेखी की जाती है, वर्ग निर्भरता को प्रबंधित करना निर्विवाद रूप से ऑब्जेक्ट-ओरिएंटेड डिज़ाइन का एक केंद्रीय बिंदु होता है और जिनके अंतर्निहित तर्क निश्चित रूप से कारखानों में कुछ "नए" ऑपरेटरों को छोड़ने से ज्यादा गहरा हो जाता है, या इससे भी बदतर , कंजूस कन्स्ट्रक्टरों में, जो उन निर्भरता को बाहर की दुनिया से छिपाते हैं, ताकि उन्हें अलगाव में ठीक तरह से डिकॉप्ड नहीं किया जा सके या परीक्षण किया जा सके।

यह महसूस करने की कोई आवश्यकता नहीं है कि सभी खो गए हैं, हालांकि, कुछ अतिरिक्त तरीके मौजूद हैं जो एक कुशल तरीके से निपटने के लिए उपयोग किए जा सकते हैं जिस तरह क्लास को उनके सहयोगियों के साथ प्रदान किया जाता है, जिसमें सर्विस लोकेटर पैटर्न का उपयोग शामिल है, कच्चे निर्भरता Semaltेट, और यहां तक ​​कि एक निर्भरता मिसाल कंटेनर के लाभों के लिए अपील भी। इन सभी को अनुवर्ती कार्रवाई में विस्तार से कवर किया जाएगा, इसलिए देखते रहें!

स्वेतलाना आर / शटरस्टॉक के माध्यम से चित्र

March 8, 2018