2010-04-04 12 views
5

हमारी टीम आकार में बहुत बड़ी परियोजनाओं में आगे बढ़ रही है, जिनमें से कई उनके भीतर कई खुली स्रोत परियोजनाओं का उपयोग करते हैं।बड़े सी ++ परियोजना मॉड्यूलर रखने के लिए सलाह?

लाइब्रेरी और निर्भरता रखने के लिए कोई सलाह या सर्वोत्तम प्रथा अपेक्षाकृत मॉड्यूलर और आसानी से अपग्रेड करने योग्य है जब उनके लिए नई रिलीज समाप्त हो जाती है?

इसे एक और तरीका रखने के लिए, मान लें कि आप एक ऐसा प्रोग्राम बनाते हैं जो ओपन सोर्स प्रोजेक्ट का कांटा है। चूंकि दोनों परियोजनाएं बढ़ती हैं, कोर को अपडेट बनाए रखने और साझा करने का सबसे आसान तरीका क्या है?

जो मैं केवल पूछ रहा हूं उसके बारे में सलाह कृपया ... मुझे "आपको इसके बजाय ऐसा करना चाहिए" या "आप क्यों हैं" की आवश्यकता नहीं है .. धन्यवाद।

+0

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

+0

आईएमओ यह Programmars.SE पर है, लेकिन चूंकि माइग्रेशन की अनुमति देने के लिए यह बहुत पुराना है, इसलिए मैं बस बंद करने के लिए मतदान कर रहा हूं। रैपिंग के लिए – o11c

उत्तर

6

ओपन सोर्स प्रोजेक्ट्स के क्लोन के साथ अपस्ट्रीम स्रोतों के अनुसार आपके सबसे बड़े सिरदर्द सिंक/पैच में रहेंगे। आपको नई सुविधाओं की परवाह नहीं है, लेकिन आपको निश्चित रूप से लागू महत्वपूर्ण बग फिक्स की आवश्यकता होगी।

मेरा सुझाव सावधानीपूर्वक ऐसी आंतरिक परियोजनाओं को साझा पुस्तकालयों में लपेटना होगा, ताकि यदि आप एबीआई परिवर्तनों से नहीं टूटे हैं तो आप केवल उन हिस्सों को अपर्याप्त रूप से अपग्रेड कर सकते हैं।

एक और बात - यदि आप ओपन सोर्स प्रोजेक्ट में बग ढूंढते हैं और ठीक करते हैं - फिक्सेस को अपने आप में न रखें। पैच अपस्ट्रीम पुश करें। इससे परियोजना बेहतर हो जाएगी और आपको नए संस्करण के साथ विलय करने के दिन बचाएंगे।

+0

+1 - अपनी सभी निर्भरताओं को स्वयं लपेटने का अच्छा विचार। – AshleysBrain

+0

महान सलाह! धन्यवाद! – Jay

+0

+1 पैच को धक्का देने के सुझाव देने के लिए +1: भले ही आप साझा करना पसंद न करें, सोचें कि आपको बाद में अपने पैच पर सामुदायिक समर्थन मिलेगा, इसलिए वास्तव में कोई कारण नहीं है। –

4

वरीयता के क्रम में

  1. तीसरे पक्ष के पुस्तकालयों के लिए संभव के रूप में कुछ परिवर्तन करें। कोशिश करें और अपने कोड के भीतर अपनी सीमाओं के चारों ओर जाओ। अपने परिवर्तन दस्तावेज करें और फिर पैच सबमिट करें।
  2. यदि आप अपनी सीमाओं के आसपास नहीं आ सकते हैं, तो पैच के रूप में अपना परिवर्तन सबमिट करें (यह कुछ परियोजनाओं की ग्लेशियल गति के साथ आदर्शवादी हो सकता है)।
  3. यदि आप इनमें से किसी भी चीज को नहीं कर सकते हैं, तो दस्तावेज जो आपने केंद्रीकृत स्थान में बदल दिया है ताकि गरीब व्यक्ति नए संस्करणों के लिए एकीकरण कर सकें, यह पता लगा सकता है कि आप क्या कर रहे थे, और यदि परिवर्तन किए गए अभी भी जरूरी है

1 और 2 बहुत पसंद किया जाता है (हालांकि, तेजी से और बहुत धीमी गति से क्रमशः) है, जबकि तीसरा विकल्प केवल सिर दर्द और कीड़े के लिए नेतृत्व करेंगे अपने कोड के आधार के रूप निर्भरता 'कोड बेस से भटक। मेरे कोड में, मेरे पास आईडीई में तीसरे पक्ष कोड को लोड नहीं किया गया है जब तक कि मुझे हेडर फ़ाइल को समझना न पड़े। यह उन चीज़ों को बदलने के लिए प्रलोभन को हटा देता है जो मेरी नहीं हैं।

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

+0

आपकी सलाह के लिए धन्यवाद! – Jay