परियोजनाओं में कोड के छोटे टुकड़े साझा करने के लिए सर्वोत्तम अभ्यास


102

मैं हमेशा काम पर सख्ती से DRY सिद्धांत का पालन करने की कोशिश करता हूं ; हर बार जब मैंने आलस्य से कोड दोहराया है तो बाद में वापस काटता है जब मुझे उस कोड को दो स्थानों पर बनाए रखने की आवश्यकता होती है।

लेकिन अक्सर मैं छोटे तरीकों (शायद कोड की 10 - 15 पंक्तियों) को लिखता हूं, जिन्हें दो परियोजनाओं में पुन: उपयोग करने की आवश्यकता होती है जो एक दूसरे का संदर्भ नहीं दे सकते । नेटवर्किंग / स्ट्रिंग्स / एमवीवीएम आदि के साथ करने के लिए विधि कुछ हो सकती है और यह उस परियोजना के लिए आम तौर पर उपयोगी विधि नहीं है जो मूल रूप से इसमें बैठती है।

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

  1. हम दसियों / सैकड़ों छोटी परियोजनाओं के साथ समाप्त होते हैं - प्रत्येक को छोटी कक्षाओं / विधियों को घर में रखने के लिए जिन्हें हमें पुन: उपयोग करने की आवश्यकता है। क्या यह .DLLएक छोटे से कोड के लिए पूरी तरह से नया बनाने के लायक है ?
  2. हम एक एकल परियोजना के साथ असंबंधित तरीकों और कक्षाओं के बढ़ते संग्रह को समाप्त करते हैं। यह दृष्टिकोण वह कंपनी है जिसके लिए मैं काम करता था; उनके पास एक प्रोजेक्ट था base.commonजिसका नाम ऊपर बताई गई चीज़ों के लिए फ़ोल्डर था: नेटवर्किंग, स्ट्रिंग हेरफेर, एमवीवीएम आदि। यह अविश्वसनीय रूप से आसान था, लेकिन इसे संदर्भित करते हुए इसे अनावश्यक रूप से उस सभी अप्रासंगिक कोड के साथ खींच लिया गया जिसकी आपको आवश्यकता नहीं थी।

तो मेरा सवाल है:

एक सॉफ्टवेयर टीम परियोजनाओं के बीच कोड के छोटे बिट्स का पुन: उपयोग कैसे करती है?

मुझे विशेष रूप से दिलचस्पी है अगर किसी ने ऐसी कंपनी में काम किया है जिसकी इस क्षेत्र में नीतियां हैं, या जो व्यक्तिगत रूप से इस दुविधा में है जैसा कि मेरे पास है।


नोट: "प्रोजेक्ट", "समाधान" और "संदर्भ" शब्दों का मेरा उपयोग विज़ुअल स्टूडियो में .NET विकास की पृष्ठभूमि से आता है। लेकिन मुझे यकीन है कि यह मुद्दा भाषा और मंच स्वतंत्र है।


21
+1, हालाँकि मुझे लगता है कि किसी के साथ काम करने में हास्य का एक तत्व है। .NET DLL संदर्भ के माध्यम से अप्रासंगिक कोड में खींचने के बारे में चिंतित है।
JDB

2
@ColeJohnson .NET अपने आप में एक बहुत बड़ा संदर्भ है! संभवतः मैं खुद बनाऊंगा dlls से बहुत बड़ा।
जॉर्ज पॉवेल

2
मै समझ गया। हालाँकि, .NET का JIT कंपाइलर केवल आवश्यक विधियों को RAM में लोड करता है (जब उन्हें कॉल किया जाता है)
Cole Johnson

1
सच। यद्यपि आपको अभी भी पूरे .NET फ्रेमवर्क को किसी को वितरित करना है जो आपके उत्पाद का उपयोग करना चाहता है, और बड़ी परियोजनाओं और जटिल समाधानों को प्रबंधित करना अधिक कठिन है।
जॉर्ज पॉवेल

जवाबों:


75

यदि वे वास्तव में पुन: प्रयोज्य तरीके / वर्ग हैं, तो आप उन्हें 'स्विस आर्मी नाइफ' पुस्तकालयों की एक छोटी संख्या में लिख सकते हैं। हम ऐसा अक्सर अपनी कंपनी में करते हैं; हम उन्हें फ्रेमवर्क लाइब्रेरी कहते हैं:

  • Framework.Data - डेटाबेस प्रश्नों के साथ काम करने के लिए उपयोगिताएँ।
  • Framework.ESB - हमारे उद्यम सेवा बस के साथ बातचीत के लिए मानक तरीके
  • Framework.Logging - एकीकृत लॉगिंग सिस्टम
  • Framework.Services - वेब सेवाओं के साथ बातचीत के लिए उपयोगिताएँ
  • Framework.Strings - उन्नत स्ट्रिंग हेरफेर / फजी स्ट्रिंग खोज आदि के लिए उपयोगिताएँ।
  • ...

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

यदि वे वास्तव में सिर्फ स्निपेट हैं, न कि वास्तविक तरीके / कक्षाएं जिन्हें आसानी से पुन: उपयोग किया जा सकता है, तो आप उन्हें आईडीई में कोड स्निपेट के रूप में वितरित करने का प्रयास कर सकते हैं (जैसे विजुअल स्टूडियो कोड स्निपेट्स )। जिन टीमों के साथ मैंने अतीत में काम किया है, उनमें एक सामान्य स्निपेट लाइब्रेरी थी, जिसने सभी के लिए आंतरिक कोड के साथ हमारे मानक कोडिंग प्रथाओं का पालन करना आसान बना दिया।


4
+1 यह मेरा दृष्टिकोण भी होगा। यह जानने का इच्छुक है कि आपने यह कैसे तय किया कि दो या अधिक पहलुओं से सामान का सौदा करने वाला कोड कहां रखा जाए। उदाहरण के लिए IPAddressToString। और क्या आप इन पुस्तकालयों को एक दूसरे का उपयोग करने की अनुमति देते हैं। उदाहरण के लिए सेवाओं और डेटा लॉगिंग से शायद बहुत लाभ उठा सकते हैं ...
मार्जन वेनमा

5
@MarjanVenema क्रॉस-कटिंग कोड के लिए, यह इस बात पर निर्भर करता है कि उपभोक्ताओं को कौन सी विधि अधिक उपयोगी लगेगी। इसके लिए IPAddressToString, यह संभव है कि नेटवर्क प्रोटोकॉल से निपटने वाले उपभोक्ताओं को इसका उपयोग करना होगा, लेकिन जो उपभोक्ता स्ट्रिंग्स के साथ बहुत कुछ करते हैं वे वास्तव में आईपी पते के बारे में बिल्कुल भी परवाह नहीं कर सकते हैं। यह शायद एक नेटवर्किंग पैकेज के बजाय खत्म हो जाएगा Framework.Strings
pswg

@MarjanVenema हम अंतर-निर्भरता से बचने की कोशिश करते हैं। हमारी सेवाओं और डेटा फ्रेमवर्क को इस तरह से लिखा जाता है कि वे स्वयं से कोई लॉगिंग नहीं करते हैं, लेकिन उपभोक्ता के लिए उचित लॉगिंग कोड लिखना आसान बनाते हैं। फ्रेमवर्क पुस्तकालयों को एक दूसरे को संदर्भित करने की अनुमति है, लेकिन केवल विस्तार से - जैसे Framework.Logging.Gibraltarलॉगिंग सिस्टम में एक विशेष ऐड-ऑन है।
pswg

5
+1 आप इन रूपरेखा पुस्तकालयों को ले सकते हैं और उन्हें एक आंतरिक NuGet रिपॉजिटरी (एक नेटवर्क फ़ोल्डर के रूप में सरल) पर तैनात कर सकते हैं और आपको इसे प्रबंधित करने का एक अच्छा तरीका मिल गया है।
स्टीवन एवर्स

2
@SteveEvers मैं वास्तव में अभी उस सेटिंग पर काम कर रहा हूं। : पी

21

मैं कई कारणों से स्वीकृत उत्तर से असहमत हूं।

मेरे अनुभव में, जब मुझे स्वीकार किए गए उत्तर की तरह "विविध" पुस्तकालय दिखाई देते हैं, तो वे पहिया को सुदृढ़ करने का एक बहाना है (या यहां (एनआईएच) का आविष्कार नहीं किया गया ) - न खुद को दोहराने (डीआरवाई) का उल्लंघन करने से कहीं अधिक बड़ा पाप ।

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

कई सामान्य प्रयोजन पुस्तकालयों का दृष्टिकोण एक बुरा उदाहरण निर्धारित करता है। यह विधानसभा की एक बारीक ग्रैन्युलैरिटी की ओर जाता है और बहुत सी असेंबली खराब है। मैंने हाल ही में 24 पुस्तकालयों से 6 पुस्तकालयों में एक इन-हाउस को कम किया है। इसने संकलन के समय को कई मिनटों से ~ 20 सेकंड तक सुधार दिया। विजुअल स्टूडियो भी अधिक असेंबलियों के साथ लोड करने और कम उत्तरदायी होने के लिए धीमा है। बहुत सारे पुस्तकालयों के होने से यह भ्रम पैदा होता है कि कोड कहाँ रहना चाहिए; कम, सरल नियमों को प्राथमिकता दें।

.Net फ्रेमवर्क में सामान पर्याप्त क्यों नहीं है? फ्रेमवर्क बहुत बड़ा है; कई बार मैंने कोड देखा है कि फिर से लागू सामान जो पहले से ही वहां मौजूद है। वास्तव में सुनिश्चित करें कि आपके फ्रेमवर्क .Net फ्रेमवर्क में अंतराल भर रहे हैं और न केवल सौंदर्य कारणों से मौजूद हैं (उदाहरण के लिए ".Net फ्रेमवर्क यहां पसंद नहीं है" या शायद कुछ समय से पहले का अनुकूलन )

अपनी वास्तुकला में एक और परत का परिचय एक महत्वपूर्ण जटिलता लागत है। परत क्यों मौजूद है? मैंने गलत पुन: उपयोग देखा है, इसका मतलब है कि, कोड एक इन-हाउस फ्रेमवर्क के शीर्ष पर बनाया गया है। यह मानक पुस्तकालयों के शीर्ष पर सीधे इसे लागू करने के लिए कहीं अधिक कुशल होता।

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

मेरी सिफारिशें:

  • इस कोड को साझा न करें।
  • एक नए पुस्तकालय का निर्माण करें यदि इसमें एक सुसंगत उद्देश्य कीचड़ डिजाइन पैटर्न की गेंद का उपयोग न करें ।
  • मौजूदा 3 पार्टी पुस्तकालयों का पुन: उपयोग करें जहां संभव हो।
  • जहां कोड रहना चाहिए, वहां सरल नियमों के साथ कम असेंबलियों को प्राथमिकता दें।

1
ओपन सोर्स पुस्तकालयों का उपयोग करने में एक फ्रिंज लाभ जहां उपलब्ध है - यदि आप कुछ सुधारों के साथ आते हैं तो आप उन्हें समुदाय में वापस साझा कर सकते हैं! .Net MS के साथ उदाहरण के लिए एक EnterpriseLibrary (अब खुला स्रोत) प्रकाशित किया गया है जो सामान्य परिदृश्यों के लिए बहुत अच्छा उपकरण देता है, वहां कुछ ऐसा खोजें जिसे बेहतर बनाया जा सके और हे प्रिस्टो! सभी को लाभ!
ग्लेनट्रॉन

2
मैं वास्तव में यहाँ स्वीकृत जवाब से असहमति नहीं देखता हूं :-)। "कम असेंबली, जहां कोड रहना चाहिए के रूप में सरल नियमों के साथ" स्वीकार किए जाते हैं जवाब के लिए एक विरोधाभास नहीं है। जवाब भी उचित रूप में कई अलग-अलग विधानसभाओं का उपयोग करने की वकालत करता है।
साल्स्के

पांच साल बाद माइक्रोसॉरेस मार्गदर्शन भी इस अभ्यास पर जुट गया है
डेव हिलियर

11

कोड के छोटे बिट्स के लिए - बिना किसी निर्भरता के एक एकल वर्ग का कहना है - हम कोड को प्रोजेक्ट में कॉपी और पेस्ट करते हैं। यह DRY के उल्लंघन जैसा लगता है, और मैं मानता हूँ कि यह कई बार हो सकता है। लेकिन लंबे समय से यह कुछ कारणों से बड़े पैमाने पर, बहु-प्रमुख कॉमन्स परियोजना के कुछ प्रकार होने से बहुत बेहतर है।

सबसे पहले, कोड को संभालना आसान है, खासकर जब सामान बनाना और डिबगिंग करना।

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

इसलिए अगर यह पर्याप्त नहीं है, तो यह स्वयं के नामस्थान के लिए है, हम इसे परियोजना पर उचित बिट्स में धकेल देते हैं और इसे एक दिन कहते हैं।


5
मैं इस दृष्टिकोण से सहमत नहीं हूँ। मैं कोड के छोटे टुकड़ों के प्रबंधन के साथ रखरखाव की समस्याओं की सराहना करता हूं, लेकिन मैं तर्क दूंगा कि कुछ सामान्य पुस्तकालय उन सभी में से बनाए जा सकते हैं जैसे @psw सुझाव दे रहा है। इसमें मामूली ट्विक्स के साथ कोड की डुप्लीकेट प्रतियां होने से परेशानी पूछी जा रही है। मान लिया जाएगा, बग फिक्स को याद किया जाएगा।
एंड्रयू टी फिनेल

2
-1 (जवाब के लिए)। यह निश्चित रूप से आसान है कि हर किसी के कार्यक्रमों के अपने संस्करणों की अपनी प्रतियां हों। इस तरह से 80 के दशक में सॉफ्टवेयर विकसित किया गया था। मैंने तब से सीखा है कि - दीर्घकालिक - यह एक गड़बड़ की ओर जाता है। यह सही काम करने के लिए कठिन है और एक आम पुस्तकालय है क्योंकि लोगों को तब अपने काम के बारे में बहुत अधिक संवाद करना होगा। खैर, उन्हें चाहिए।
माइकल डुरंट

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

6

आपके द्वारा वर्णित दूसरा समाधान उतना बुरा नहीं है। .NET में, आप GAC से असेंबली का संदर्भ भी लेते हैं, भले ही आप इसका एक ही वर्ग उपयोग करते हों। 'अप्रासंगिक कोड को खींचना' ऐसा नहीं है जैसा कि आप सोच सकते हैं। इस मामले में कम से कम संबंधित तरीकों और वर्गों को अलग-अलग नामस्थानों में व्यवस्थित रूप से रखना महत्वपूर्ण है। इस समाधान को गड़बड़ होने से बचाने के लिए इसके अतिरिक्त एपीआई डिजाइन के लिए अच्छे अभ्यासों को लागू किया जाना चाहिए।

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


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

6

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

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

यदि परियोजनाएं उचित रूप से दानेदार हैं और नाम स्थान समझदार हैं तो मैं इसे स्थानों में एक लोकप्रिय दृष्टिकोण बन सकता हूं।


किस अर्थ में आप उन्हें खोजने योग्य नहीं होने की उम्मीद करते हैं? हम एक बड़े, और बढ़ते हुए, उस तरह से नगेट पैकेजों की संख्या का उपयोग करते हैं। हमारे पास सबसे बड़ा मुद्दा संस्करण और निर्भरता के प्रबंधन के साथ है।
पीडीआर

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

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

@sarfeast अच्छा होगा यदि आप Nuget सर्वर के लिए एक लिंक साझा कर सकते हैं, और इसके बारे में थोड़ा बता सकते हैं।
हंस-पीटर स्टॉर

6

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


5

GitHub के पास कोड स्निपेट सहेजने के लिए एक बहुत उपयोगी उपकरण है https://gist.github.com/

यह आपके स्निपेट्स को गिट रिपॉजिटरी के रूप में संग्रहीत करता है जिसे आप निजी रख सकते हैं, या अन्य लोगों के साथ स्निपेट्स साझा करने के लिए उपयोग कर सकते हैं।


3

टीम / प्रोजेक्ट / कंपनी के आकार के आधार पर, यह प्रभावोत्पादक रूप से करने के लिए कठिन बात होगी, जब तक कि यह आपके वातावरण में पहले से ही किसी तरह से निर्मित न हो, और हर समाधान जो आप पाएंगे (यदि आप इसे लागू करते हैं) कुछ पैसे खर्च होंगे। (यह आपको अधिक सुरक्षित कर सकता है, लेकिन आप आसानी से माप नहीं पाएंगे)। आपको यह जांचना होगा कि क्या इसकी कीमत है। ध्यान रखें, भी, पुन: प्रयोज्य समाधान अमूर्त हो जाते हैं और अक्सर कई स्थितियों में फिट होंगे, लेकिन इष्टतम होने के बिना।

किसी भी स्थिति में, यदि आप एक से अधिक लोगों द्वारा निर्मित कोड के लिए ऐसा करना चाहते हैं, तो सबसे पहले आपको हर किसी के सहयोग और सहयोग की आवश्यकता होगी। इसमें डेवलपर्स और प्रबंधक शामिल हैं।

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

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


3

मैं एक बहुत समस्या में चला गया है, और मेरा पसंदीदा समाधान एक github / pubic वेब-सक्षम भंडार में कोड पोस्ट करना है। यह कई समस्याओं का हल करता है -

  1. आसान पहुंच और साझा करने में आसान। cvs / svn / Enterprises-repos का मतलब है कि प्रोजेक्ट को कई IDE वर्कस्पेस में चेक करना और कभी-कभी किसी छोटे कोड स्निपेट को संदर्भित करने के लिए वर्कस्पेस या कंप्यूटर को स्विच करना।
  2. यह मानते हुए कि कोड के इन स्निपेट्स कोड के मालिकाना / वर्गीकृत टुकड़े नहीं हैं और सार्वजनिक रूप से उपलब्ध ज्ञान के रूपांतर हैं, इन्हें सार्वजनिक रेपो पर पोस्ट करना जैसे कि दूसरों को इस पर दिखेगा और इसमें योगदान भी हो सकता है।
  3. अपने नाम के तहत सार्वजनिक डोमेन में कुछ पोस्ट करने से प्रतिष्ठा का अतिरिक्त दबाव पड़ता है। आप चीजों को दोबारा जांचेंगे और अपडेट करेंगे, क्योंकि यह प्रोग्रामर के रूप में आपकी क्षमताओं पर निर्भर करता है।
  4. अद्यतन। रेपो में कोड स्निपेट्स को बनाए रखने की बात यह है कि अगर लंबे समय तक स्निपेट का इस्तेमाल नहीं किया गया है, तो यह बासी हो सकता है (इसमें पुराने एपिस / लिबास शामिल हैं)। उदाहरण - जावा कोड फ़ाइल को पढ़ने के लिए स्निपेट। आप 2009 में ऐसा करने का सबसे अच्छा तरीका समझ सकते हैं, लेकिन 2014 में एक नई फाइल एपी आई जो सब कुछ बदल देती है। आपका स्निपेट? अभी भी 2009 में अटका हुआ है। एक सार्वजनिक रिपो में, चीजें अपडेट हो जाएंगी, या तो आपके द्वारा (क्योंकि बुलेट 3), आपके साथियों, या सामान्य प्रोग्रामर आबादी के कुछ सदस्य और इस प्रक्रिया में, आपको कुछ ठीक करने के लिए सुझाव भी मिल सकते हैं। आप लंबे समय से गलत कर रहे होंगे।

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


2

हमारे पास एक अलग प्रोजेक्ट "उपयोगिताओं" है जहां हम इन सभी छोटे तरीकों को परीक्षणों के साथ संग्रहीत करते हैं।

जब किसी परियोजना को कुछ उपयोगिता की आवश्यकता होती है, तो यह आवश्यक स्रोत के साथ "लिंक के रूप में जोड़ें" के साथ स्रोत फ़ाइल को जोड़ता है।

इसका मतलब है कि इसमें कोई रन टाइम निर्भरता नहीं जोड़ी गई है (जब तक कि सम्मिलित फ़ाइल को एक की आवश्यकता न हो)।

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

उपयोगिता परियोजना के साथ एक जटिलता वस्तुओं पर दृश्यता स्तर तय करना है। अंगूठे का एक नियम यह है कि विधियां आंतरिक और डेटा संरचनाएं सार्वजनिक होनी चाहिए।


2

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

जाहिर है कि यह केवल इंटरनेट एप्स के साथ काम करता है (और केवल उसी स्थानीय नेटवर्क पर मिलिसकॉन्ड समय में काम करता है), लेकिन इसके कुछ बहुत अच्छे फायदे हैं।


0

मैं हाल ही में इस सेवा के साथ आया हूं: Snip2Code ( http://www.snip2code.com )।

अपनी टीम के साथ सिर्फ अपने स्निपेट (पूरी तरह से लाइब्रेरी नहीं) साझा करना एक दिलचस्प तरीका है। यह सामान्य पुस्तकालयों को बनाने के लिए सामान्य बिंदु को तोड़ता है जिसे अन्य परियोजनाओं में संदर्भित किया जाना चाहिए, और मेरी राय में यह एक मूल्यवान दृष्टि है।

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

वास्तविक आवश्यकता टीम के बीच आम प्रथाओं को साझा करने के लिए एक उपकरण होना चाहिए। मैंने गितुब के गिस्ट का उपयोग करने की कोशिश की, लेकिन मैं उनकी (वास्तव में गरीब) खोज के साथ फंस गया हूं और इस तथ्य के साथ कि मैं उन्हें सिर्फ अपनी टीम के बीच साझा नहीं कर सकता और अन्य के साथ नहीं ...

(अस्वीकरण: मैं Snip2Code के संस्थापक में से एक हूं, और मैं कुछ समय पहले अपने सह-संस्थापकों के साथ - आपकी बहुत ही मानसिकता में था: यही कारण है कि हमने इस परियोजना को शुरू करने का फैसला किया है !!)

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