मैं "निर्भरता प्रबंधन" के लिए एक मामला कैसे बना सकता हूं?


9

मैं वर्तमान में बिल्ड (अला मावेन, आइवी, नुगेट) के लिए निर्भरता प्रबंधन को अपनाने और साझा मॉड्यूल के लिए एक आंतरिक रिपॉजिटरी बनाने के लिए एक मामला बनाने की कोशिश कर रहा हूं, जिसमें से हमारे पास एक दर्जन से अधिक उद्यम हैं। इस बिल्ड तकनीक के प्राथमिक विक्रय बिंदु क्या हैं? मेरे पास जो अभी तक हैं:

  • साझा मॉड्यूल, विशेष रूप से संस्करण उन्नयन के वितरण और आयात करने की प्रक्रिया को मिटाता है।
  • साझा किए गए मॉड्यूल की निर्भरता की आवश्यकता होती है, जिसे ठीक से प्रलेखित किया जाना चाहिए।
  • स्रोत नियंत्रण से साझा मॉड्यूल को हटाता है, चेकआउट / चेक इन को तेज और सरल करता है (जब आपके पास 20+ पुस्तकालयों के साथ आवेदन होते हैं तो यह एक वास्तविक कारक है)
  • आपके संगठन में तीसरे पक्ष के काम का उपयोग करने के लिए अधिक नियंत्रण या जागरूकता की अनुमति देता है।

क्या कोई विक्रय बिंदु है जो मुझे याद आ रहा है? क्या सुधार मेट्रिक्स देने वाले कोई अध्ययन या लेख हैं?


1
मुझे लगता है कि आपने इसे नस्ट कर दिया है।
माइक पार्टरिज

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

1
@suslik "टूटा मावेन" सेटअप क्या है, इस बारे में विस्तार से बताएं?
एंड्रयू टी फिननेल

1
@AndrewFinnell का कहना है कि परियोजनाओं पर काम करने वाले 5 समूह हैं जिन्हें आपको अपने निर्माण के लिए तैयार करने के लिए खींचने की आवश्यकता है, और खराब समन्वय के कारण हर कोई पुस्तकालयों के विभिन्न संस्करणों के आधार पर समाप्त होता है। तब यह पता चलता है कि परियोजनाओं में से एक को अभी तक 'जारी' नहीं किया गया था, लेकिन (किसी ने मावेन को नहीं बताया!) आपके पास एक निर्भरता है जिसे आपको संतुष्ट करने की आवश्यकता है। यह होने वाला नहीं है, लेकिन स्वचालित रिज़ॉल्यूशन इसे बहुत आसान बना देता है। यदि सभी के पास / लिबास है तो वह svn में बनाए रखने के लिए लोगों को चीजों को हाथ से निकलने से पहले रोकने और सवाल पूछने के लिए मजबूर करेगा।
15

2
@MrFox वास्तव में गरीब समन्वय के कारण है, न कि मावेन निर्भरता संकल्प। मैंने समान स्थितियों का अनुभव किया है और मैं मावेन का प्रशंसक नहीं हूं, लेकिन मुझे लगता है कि उपकरण मानव-संबंधित समस्याओं जैसे कि समय से पहले रिलीज, संचार की कमी, परीक्षण की कमी, खराब रखरखाव, आदि के समाधान के लिए नहीं हैं
स्क्रिप्टिन

जवाबों:


8

मैं सकारात्मक पर 100% यकीन नहीं कर रहा हूँ। यहाँ कुछ नकारात्मक है

  1. आप अक्सर तीसरे पक्ष के सर्वर / समापन बिंदुओं पर निर्भरता जोड़ते हैं जो स्थिर नहीं हो सकते हैं।

    मैंने यह किया है कि यह बोवर के साथ होता है कि कुछ निर्भरता का रेपो हटा दिया गया था या स्थानांतरित कर दिया गया था। तो एक नया देव आता है, मेरे रेपो को क्लोन करता है, टाइप करता है bower installऔर अन-एक्सेसिबल रेपो के लिए त्रुटियां प्राप्त करता है। अगर इसके बजाय मैंने अपने रेपो में तीसरे पक्ष के कोड की जाँच की थी तो समस्या गायब हो गई।

    यह हल किया जाता है जैसे कि ओपी सुझाव देता है कि क्या आप अपने द्वारा चलाए जा रहे सर्वर पर रखी गई प्रतियों से डिप्स खींच रहे हैं।

  2. नोब्स के लिए कठिन।

    मैं बहुत कम कमांड लाइन अनुभव वाले कला छात्रों के साथ काम करता हूं। वे प्रसंस्करण, आर्टुइनो, यूनिटी 3 डी के साथ कला बनाते हैं, और बहुत कम तकनीक ज्ञान के साथ प्राप्त करते हैं। वे मेरे द्वारा लिखे गए कुछ HTML5 / JavaScript का उपयोग करना चाहते थे। बोवर की वजह से कदम

    1. Github से रेपो का ज़िप डाउनलोड करें (ध्यान दें कि github पर हर रेपो के दाईं ओर है। क्योंकि वे गिट नहीं जानते हैं)
    2. नोड डाउनलोड करें और इंस्टॉल करें (इसलिए हम bower को स्थापित करने के लिए npm चला सकते हैं)
    3. Git या msysgit स्थापित करें (क्योंकि बोवर को इसकी आवश्यकता है और यह कई छात्रों की मशीनों पर स्थापित नहीं है)
    4. बोवर स्थापित करें ( npm install -g bower)
    5. bower install (अंत में हमारी निर्भरता पाने के लिए)

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

  3. खींचते समय यह एक और कदम जोड़ता है।

    ऐसा कई बार हुआ है जब मैं एक git pull origin masterकोड करता हूं और फिर अपने कोड का परीक्षण करता हूं और मुझे यह याद रखने में 5 से 10 मिनट लगते हैं कि मुझे bower install नवीनतम डिप्स प्राप्त करने के लिए टाइप करने की आवश्यकता है । मुझे यकीन है कि यह कुछ पुल स्क्रिप्ट हुक के साथ आसानी से हल हो गया है।

  4. यह गिट ब्रांचिंग को कठिन बनाता है

    यदि 2 शाखाओं में अलग-अलग डिप हैं, तो आप एक प्रकार के निकम्मे हैं। मुझे लगता है कि आप bower installहर के बाद टाइप कर सकते हैं git checkout। गति के लिए इतना।

जैसा कि आपके सकारात्मक के लिए मुझे लगता है कि उनमें से प्रत्येक के लिए काउंटर उदाहरण हैं

साझा मॉड्यूल, विशेष रूप से संस्करण उन्नयन के वितरण और आयात करने की प्रक्रिया को मिटाता है।

बनाम क्या? यह निश्चित रूप से वितरित करना आसान नहीं है। 20 के बजाय एक रेपो को खींचना आसान नहीं है और असफल होने की अधिक संभावना है। ऊपर # 1 देखें

स्रोत नियंत्रण से साझा मॉड्यूल को हटाता है, चेकआउट / चेक इन को तेज और सरल करता है (जब आपके पास 20+ पुस्तकालयों के साथ आवेदन होते हैं तो यह एक वास्तविक कारक है)।

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

आप उनके रिपॉज को अलग से क्लोन करके हल कर सकते हैं और फिर आप अपने प्रोजेक्ट डिप्स को अपनी कॉपियों को इंगित कर सकते हैं। फिर आप अपनी प्रतियों में कोई सुधार लागू करते हैं। बेशक आप यह भी कर सकते हैं कि यदि आप स्रोत को अपने रेपो में कॉपी करते हैं

आपके संगठन में तीसरे पक्ष के काम का उपयोग करने के लिए अधिक नियंत्रण या जागरूकता की अनुमति देता है।

जो तर्कयुक्त लगता है। बस अपने स्वयं के फ़ोल्डर में 3 पार्टी पुस्तकालयों को रखने के लिए देवों की आवश्यकता होती है <ProjectRoot>/3rdparty/<nameOfDep>। यह देखना उतना ही आसान है कि तीसरे पक्ष के काम में क्या उपयोग किया जाता है।

मैं यह नहीं कह रहा हूँ कि कोई सकारात्मकता नहीं है। पिछली टीम मैं पर था> 100 3 दलपद डिपो। मैं सिर्फ इशारा कर रहा हूं कि यह सब गुलाब नहीं है। मैं मूल्यांकन कर रहा हूं कि क्या मुझे उदाहरण के लिए अपनी आवश्यकताओं के लिए बोवर से छुटकारा चाहिए।


वाह, बहुत सारे नकारात्मक वोट और उनके लिए एक भी औचित्य नहीं। बहुत बढ़िया! :(
gman

मैंने कभी भी बोवर का उपयोग नहीं किया है, लेकिन installहर बार जब आप चेकआउट करते हैं तो डिजाइन दोष की तरह लगता है। किसी प्रोजेक्ट का निर्माण करते समय इसे कॉन्फ़िगर करना चाहिए: यदि परिवर्तन होते हैं, तो इसे खरोंच से पुनर्निर्माण करना चाहिए। इसके अलावा, मूविंग रेपो मावेन के लिए अप्रासंगिक है, क्योंकि यह मैवेन रिपॉजिटरी से कलाकृतियों को खींचता है, जो कलाकृतियों को संग्रहीत करता है, न कि कोड के साथ वास्तविक रिपोजिट। यदि आप इसे Maven रिपॉजिटरी में प्रकाशित करते हैं तो आप केवल अपनी कलाकृतियों के परिवर्तन artifactIdऔर groupIdअगले संस्करण में कर सकते हैं। तो, आपके अंक # 1 और # 4 ज्यादातर मावेन के लिए विशेष रूप से अप्रासंगिक हैं। # 3 को mvn clean(कभी-कभी)
स्क्रिप्टिन

जबकि सच है, # 2 नुकसान नहीं है - यह एक व्यापार बंद है। बेशक, आपको अपने उपकरण सीखने होंगे! उदाहरण के लिए, Git को पकड़ना बहुत कठिन है, लेकिन डेम नॉब्स के कारण मैं इस पर हार नहीं मानूंगा।
स्क्रिप्टिन

1

बारह फैक्टर ऐप पर एक नज़र डालें

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

यदि आप मावेन रिलीज़ प्रक्रिया का पालन करते हैं (औपचारिक रिलीज़ तैयार होने तक स्नैपशॉट विकसित करें, तो कभी भी पिछली रिलीज़ को अधिलेखित करने का प्रयास न करें, नेक्सस या आर्टिफैक्टिक जैसे उचित रिपॉजिटरी प्रबंधक का उपयोग करें) फिर आपके पास एक निर्माण प्रक्रिया होनी चाहिए जो अच्छी तरह से साथ हो।

एक बार जब आपके पास एक ठोस घोषणात्मक निर्माण प्रक्रिया हो जाती है, तो यह अन्य अच्छी प्रथाओं जैसे जेनकींस के साथ निरंतर एकीकरण , सोनार के साथ सतत कोड विश्लेषण के लिए द्वार खोलता है और आप खुद को एक बेहतर संस्करण नियंत्रण की खोज करने की रणनीति की खोज करेंगे, जिसमें git का उपयोग किया जाएगा

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


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

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

0

और हमारी शीर्ष 10 सूची में # 1 आइटम है ...

(ड्रम रोल)

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


2
यह कैसे निर्भरता में जाँच से अलग है? वास्तव में यदि आप उन निर्भरताओं में जांच नहीं करते हैं जो आप जोखिम को चलाते हैं तो कुछ 3 पार्टी आपके डिस्ट्रो को तोड़ती है। मैंने ऐसा एक से अधिक बार किया है, जहां कुछ बोवर डिपो ने किसी ऐसे व्यक्ति को रेपो या नामांकित करने के लिए इंगित किया है। अगर मैंने स्रोत को हमारे रेपो में कॉपी कर लिया होता तो समस्या दूर हो जाती।
gman
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.