क्या मेरी छोटी सॉफ्टवेयर लाइब्रेरी को अन्य पुस्तकालयों के उपयोग से बचना चाहिए?


13

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

  • commons-lang3 (कुछ सामान्य जावा सामान के लिए)
  • slf4j-api (लॉगिंग के लिए)
  • commons-io (फ़ाइल सामग्री के एक छोटे से के लिए - सचमुच एक बार एक फ़ाइल पढ़ने, मुझे लगता है)

मैं नहीं चाहता कि मेरी लाइब्रेरी दूसरों की नज़र में फूली हुई दिखे। क्या मुझे अपने पदचिह्न को कम करने के लिए इन पुस्तकालयों पर अपनी निर्भरता को हटाने की कोशिश करनी चाहिए? भविष्य में अधिक उपयोग करने पर विचार करने से बचने के लिए किस प्रकार के पुस्तकालयों के बारे में कोई सलाह?


1
आपके सवाल का ठोस हिस्सा जवाबदेह लगता है: आपकी परियोजना प्लस ठोस लिबास के साथ-साथ यह ठीक भी है या नहीं। समस्या यह है, आपने इसे सामान्य भाग के साथ "छोटा ... छोटा ... टाल" दिया। जैसा कि वर्तमान में खड़ा है, यह प्रश्न हमारे प्रश्नोत्तर प्रारूप के लिए एक अच्छा फिट नहीं है। हम तथ्यों, संदर्भों या विशिष्ट विशेषज्ञता द्वारा समर्थित जवाबों की उम्मीद करते हैं, लेकिन इस सवाल पर बहस, बहस, मतदान या विस्तारित चर्चा की संभावना होगी। यदि आपको लगता है कि इस प्रश्न को बेहतर बनाया जा सकता है, तो मार्गदर्शन के लिए FAQ देखें ।
०५ पर gnat

1
@ मेरीट माफ़ी। एक नियमित स्टैक ओवरफ्लो उपयोगकर्ता के रूप में, मैंने मान लिया था कि प्रोग्रामर पर थोड़े व्यक्तिपरक प्रश्न स्वीकार्य थे। क्या कोई स्टैक एक्सचेंज साइट है जहां ऐसे मुद्दे ठीक हैं? इस बीच, मैं अपने प्रश्न से किसी भी अस्पष्टता को हटा दूँगा।
डंकन जोन्स

2
@gnat यह प्रश्न ठीक है, यहां तक ​​कि इसके मूल रूप में भी।
थॉमस ओवंस

@ThomasOwens सभी उचित सम्मान के साथ, मुझे ऐसा नहीं लगता; के लिए मूल संस्करण स्वागत मतदान खेल: मैं जल्दी से विपरीत सिफारिशों के साथ दो उत्तर लगा, दोनों यथोचित रूप से उचित
कुटकी

1
@ जगत् केवल दो? कोई बात नहीं। उन्हें मतदान करने दिया जाए। औचित्य और तर्क के साथ दो संभावित सही उत्तर प्रश्न को बुरा नहीं बनाते हैं। न तो 3 या 4 या 5 भी है। यह एक अच्छी तरह से गठित प्रश्न है जो एक समस्या है जिसे पुस्तकालय डेवलपर्स से निपटना चाहिए, और बोझ को फिर अच्छे उत्तरों के लिए रखा जाएगा
थॉमस ओवेन्स

जवाबों:


8

मैं आपकी विशिष्ट स्थिति को देखते हुए इसका उत्तर दे रहा हूं। मैं कहूंगा कि उन पुस्तकालयों का उपयोग करना ठीक है। बस यह सुनिश्चित कर लें कि आपका slf4j-api कार्यान्वयन के साथ नहीं लाता है। उसके द्वारा, मेरा मतलब है कि कार्यान्वयन निर्भरता को "परीक्षण" के रूप में चिह्नित करें। ईजी:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.2</version>
    <scope>test</scope>
</dependency>

यह SLF4j FAQ पर विस्तार से वर्णित है।

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

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


प्रतिक्रिया के लिए धन्यवाद, मुझे लगता है कि हम मोटे तौर पर उस दृष्टिकोण पर सहमत होंगे जो मुझे लेना चाहिए। बस एक बिट को सही करने के लिए - जिस तरह से एक पुस्तकालय परियोजना में slf4j को शामिल करना चाहिए, बस शामिल करने के लिए है slf4j-apiऔर कोई अन्य संबंधित कलाकृतियों को प्रदान नहीं किया गया है, अन्यथा। Slf4j.org/manual.html#projectDep देखें ।
डंकन जोन्स

मुझे याद है कि कुछ मस्तिष्क-हानिकारक व्यायाम ( excludes iircions of s) जब मुझे अपनी निर्भरता में विशेष मॉड्यूल एक slf4j संस्करण पर "सहमत" नहीं कर सकते थे। आपके उत्तर से ऐसा लग रहा है कि जैसे मॉड्यूल डिजाइनर इसे उजागर करेंगे provided, वैसे मुद्दे नहीं होंगे, सही?
gnat

2
@ या आम तौर पर जो आपके POM में एक पसंदीदा संस्करण घोषित करके हल किया जाएगा (कम से कम मावेन में)। मावेन एक विरूपण साक्ष्य के लिए परिभाषित "निकटतम" संस्करण लेता है और तत्काल पीओएम पारगमन निर्भरता को पार करता है। संभवतः यह मावेन 2.x रिलीज़ के दौरान एक व्यवहार परिवर्तन था।
डंकन जोन्स

1
Slf4j को निर्दिष्ट करने के लिए +1 provided- बहुत विनीत।
गैरी रोवे

@DuncanJones धन्यवाद, मैं शायद इस वापस तो याद किया। मेरा मवन संस्करण २.२ या २.३ था, जिसे कोई याद नहीं कर सकता है (हालाँकि मुझे याद है कि कैसे mvn dependency:analyzeछोड़े जाने तक बकवास संस्करण लाए जा रहे हैं :)
gnat

1

नहीं।

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

दूसरी ओर, यदि आपको कार्यक्षमता के उस अतिरिक्त टुकड़े की आवश्यकता है, तो आपके पास दो विकल्प हैं। आप या तो इसे स्वयं लिख सकते हैं और बहुत समय और प्रयास कर समस्याओं को हल कर सकते हैं जो अन्य पहले से हल कर चुके हैं, या आप पहले से मौजूद समाधान का उपयोग करना चुन सकते हैं (और परीक्षण किया गया है / डिबग किया गया है / आदि)।

यह हमें डाउनलोड आकार और डिस्क स्पेस फुटप्रिंट के साथ छोड़ देता है, और जब तक आप मूर्खतापूर्ण संख्याओं के बारे में बात नहीं कर रहे हैं, 2013 में वे दो कारक हैं जो उन चीजों की सूची के नीचे होना चाहिए जिनके बारे में आपको चिंता करने की आवश्यकता है।

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