थर्ड पार्टी कोड क्या माना जाता है?


15

इस प्रश्न से प्रेरित होकर तीसरे पक्ष के पुस्तकालयों का उपयोग करना - हमेशा एक आवरण का उपयोग करें? मैं जानना चाहता था कि लोग वास्तव में तीसरे पक्ष के पुस्तकालयों के रूप में क्या मानते हैं।

PHP से उदाहरण:
यदि मैं Zend फ्रेमवर्क का उपयोग करके एक एप्लिकेशन बना रहा हूं, तो क्या मुझे Zend फ्रेमवर्क पुस्तकालयों को तीसरे पक्ष के कोड के रूप में मानना ​​चाहिए?

C # से उदाहरण:
यदि मैं एक डेस्कटॉप एप्लिकेशन बना रहा हूं, तो क्या मुझे सभी। नेट क्लासेज को थर्ड पार्टी कोड के रूप में मानना ​​चाहिए?

जावा से उदाहरण:
क्या मुझे जेडडीके में सभी पुस्तकालयों को तीसरे पक्ष के पुस्तकालयों के रूप में मानना ​​चाहिए?

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


8
क्या नीचे का मतदाता समझा सकता है कि क्यों?
Songo

मैंने थर्ड पार्टी सॉफ्टवेयर के बारे में सुना है, लेकिन थर्ड पार्टी कोड नहीं। अधिकांश तृतीय पक्ष आपको अपना स्रोत कोड नहीं देते हैं।
ट्यूलेंस कोर्डोवा

जवाबों:


18

आपके उदाहरण सभी तृतीय-पक्ष कोड हैं, लेकिन आपको उनके लिए रैपर नहीं लिखना चाहिए। वे स्थिर और अच्छी तरह से नियोजित एपीआई के साथ बड़ी, परिपक्व परियोजनाएं हैं।

रैपर की आवश्यकता आपके कोड और लाइब्रेरी के बीच अमूर्तता की एक परत प्रदान करना है। आपको केवल इस अमूर्तता की आवश्यकता है जब आपको पता चलता है कि एक पुस्तकालय आपके द्वारा किए जा रहे विशिष्ट कार्य के लिए अच्छे API प्रदान नहीं करता है। तब आप अपने स्वयं के कोड को सरल बनाने के लिए रैपर बना सकते हैं, और इस तथ्य को छिपा सकते हैं कि एपीआई कॉल अजीब हैं।

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


एक आवरण या पहलू के बारे में समझाने के लिए +1, यदि आप करेंगे, तो यह आवश्यक हो सकता है।
जोशुआ ड्रेक

उत्तर के लिए धन्यवाद, लेकिन यूनिट परीक्षण के बारे में अंतिम पैराग्राफ के विषय में आप इस सवाल पर एक नज़र डाल सकते हैं कि मैं एक ऐसे वर्ग का परीक्षण करने की कोशिश कर रहा हूं जिसका पुस्तकालय ढांचे पर सीधा निर्भरता है?
सांगो

@Songo: आपकी परीक्षा की रणनीति यह होनी चाहिए Zend_Mailकि आप Loggerपरीक्षण के तहत अपनी वस्तु को पास करें । क्या PHP समर्थन डकार टाइपिंग नहीं करता है? यदि हां, तो क्या यह नकली वस्तु बनाने के लिए तुच्छ नहीं होना चाहिए ...? मुझे वास्तव में PHP का पता नहीं है, लेकिन आप PHP मॉकिंग लाइब्रेरी से उदाहरण देख सकते हैं कि यह आमतौर पर कैसे किया जाता है। ऐसी भाषाएँ जो बतख टाइपिंग का समर्थन नहीं करती हैं, तो मुझे लगता है कि आपको Zend_Mailएक इंटरफ़ेस में बदलने की आवश्यकता होगी , और फिर एक पतली आवरण बनाएँ जो इंटरफ़ेस को लागू करता है और Zend_Mailइसके सभी कॉलों को इनहेरिट करता है या इनहेरिट करता है।
एम। डुडले 13

@emddudley अच्छी तरह से हाँ, लेकिन मैं अन्य भाषाओं में समस्या के अधिक सामान्य समाधान की तलाश में था जो बतख टाइपिंग का समर्थन नहीं करता है। दरअसल रैप करने के लिए आपका समाधान Zend_Mailमेरा पहला विचार था, लेकिन जैसा कि आप अपने मूल पोस्ट में देख सकते हैं, इसे संपादित करने से पहले मैंने एक इंटरफ़ेस और आवरण का उपयोग किया था जो इसे लागू करता है। हालांकि, आवरण का एकमात्र उद्देश्य मौजूद है ताकि मैं इसके इंटरफ़ेस का मजाक उड़ा सकूं। क्या यह भाषाओं में आम है जो बतख टाइपिंग का समर्थन नहीं करता है? बिल्डिंग रैपर की अनंत संख्या मेरा मतलब है?
सोंगो

@Songo: मुझे लगता है कि यह बहुत ही भाषा है और पुस्तकालय-विशिष्ट है, और आपको अपने प्लेटफ़ॉर्म का समर्थन करने के साथ करना होगा। कभी-कभी आप लेखन आवरण के साथ फंस सकते हैं। निर्भरता इंजेक्शन और ऑब्जेक्ट मॉकिंग काफी हालिया घटनाक्रम (2004?) हैं, इसलिए सभी भाषाएं और पुस्तकालय उन्हें बहुत अच्छी तरह से समर्थन नहीं करते हैं। आप जिस "सामान्य समाधान" की तलाश कर रहे हैं वह सिर्फ एक मानसिकता है: आप ढीले युग्मन और प्रभावी इकाई परीक्षण के लिए अपने कोड को कैसे आर्किटेक्ट कर सकते हैं?
एम। डुडले

6

एक पुस्तकालय को लपेटने का लक्ष्य सक्षम करने के लिए उस पुस्तकालय पर अपने स्वयं के कोड की निर्भरता को तोड़ना है:

  • यूनिट परीक्षण - आपको अपने कोड का परीक्षण करने में सक्षम होना चाहिए। यदि कोई लाइब्रेरी आपको कक्षाओं को मॉक करने की अनुमति नहीं देती है या आपको अपने परीक्षण के लिए प्रतिक्रियाओं की आवश्यकता होती है, तो आपको उस लाइब्रेरी को लपेटने की आवश्यकता होगी। यह एक स्पष्ट समस्या है, और शायद वह मामला नहीं है जिसके बारे में आप सोच रहे हैं।
  • कार्यान्वयन में बदलाव - कोड लेखक के रूप में आपको उन परिवर्तनों को समझने की आवश्यकता है जो आपके रास्ते में आने की संभावना है, और उन परिवर्तनों की तुलना में उन्हें कितनी संभावना है, इसकी तैयारी में कितना खर्च आएगा। क्या आप .NET से JVM पर स्विच कर सकते हैं? यह मुश्किल और संभावना नहीं है; हालाँकि, आप भविष्य में UI तकनीकों या XML इंजनों को बदलने की बहुत संभावना रखते हैं।

तीसरे पक्ष के पुस्तकालयों और ढांचे को अलग करना केवल अलग-थलग परिवर्तन का एक सबसेट है।


यूनिट परीक्षण के बारे में बहुत अच्छा बिंदु। मैं यह नहीं कह रहा हूं कि हमेशा आपको आवेदन की जांच करने में सक्षम होने के लिए लपेटो, लेकिन जरूरत पड़ने पर निर्भरता को कम करने के लिए यह एक अच्छी रणनीति है।
सर्जियो अकोस्टा

2

मैं मानक पुस्तकालय के सदस्यों को तीसरे पक्ष के कोड के रूप में नहीं मानूंगा - वे सभी के बाद मानक हैं और यथोचित रूप से आपके द्वारा उपयोग किए जा रहे प्लेटफॉर्म पर उपलब्ध और कार्यात्मक होने का अनुमान लगाया जा सकता है।

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


2

मैं एक विशिष्ट प्रोग्रामिंग भाषा द्वारा प्रदान की गई पुस्तकालयों को भाषा के भाग के रूप में मानूंगा।

थान, मैं तीसरे पक्ष पर विचार करूंगा, किसी भी अन्य संस्था द्वारा विस्तार या प्रोग्रामिंग भाषा से अलग उपकरण के रूप में प्रदान की गई सभी लाइब्रेरी।

आपका उदाहरण लेते हुए, मैं Zend को थर्ड पार्टी मानूंगा। मैं अपने आवेदन का निर्माण इस तरह से करूंगा कि मेरा मुख्य व्यवसाय तर्क Zend पर निर्भर न हो।

विकिपीडिया तीसरे पक्ष के घटक को परिभाषित करता है :

कंप्यूटर प्रोग्रामिंग में, एक तृतीय-पक्ष सॉफ़्टवेयर घटक एक पुन: प्रयोज्य सॉफ़्टवेयर घटक है जिसे विकास मंच के मूल विक्रेता के अलावा किसी अन्य संस्था द्वारा स्वतंत्र रूप से वितरित या बेचा जाता है।


1

सबसे कठिन अर्थ में, आपने जो हर उदाहरण दिया है, वह थर्ड पार्टी कोड है। हालांकि, सभी तीसरे पक्ष के कोड को लपेटा नहीं जाना चाहिए। सभी तीसरे पक्ष के पुस्तकालयों को लपेटा जाना चाहिए। परिभाषा के अनुसार, फ्रेम लिपटे नहीं जा सकते क्योंकि वे आपके कोड का हिस्सा और पार्सल बन जाते हैं। यही कारण है कि आप अपनी लॉगिंग लाइब्रेरी को लपेटेंगे, लेकिन .NET फ्रेमवर्क या Zend फ्रेमवर्क को नहीं। आप अपने कोड को वास्तव में .NET से अलग नहीं कर सकते हैं - वे intertwined हैं। बेशक, अच्छी रूपरेखा में प्रोग्राम के खिलाफ इंटरफेस होगा, जिससे आप कुछ हद तक समस्या को दरकिनार कर सकेंगे।

इसे भी देखें: /programming/148747/what-is-the-difference-between-a-framework-and-a-library

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.