कई विषम पुस्तकालयों का उपयोग करते समय शैलियों को कोडिंग करें


9

मैं कुछ C ++ कोड पर काम कर रहा हूं जो कुछ पुस्तकालयों सहित कई पुस्तकालयों का उपयोग करता है, जिसमें सभी की अलग-अलग कोडिंग शैलियाँ हैं। एक बार प्रयोग करने योग्य अवस्था में पहुँच जाने पर यह खुला खट्टा हो जाएगा। जो एक अल्पकालिक योगदानकर्ता के लिए कम से कम भ्रम का कारण होगा जो एक बग को ठीक करने या एक सुविधा जोड़ने के लिए कोड की जांच करता है?

  • पूरे एप्लिकेशन में एक सुसंगत कोडिंग शैली हो, भले ही यह कभी-कभी उपयोग की गई पुस्तकालयों की विशिष्ट कोडिंग शैली से मेल नहीं खाती हो।
  • जब एक पुस्तकालय का उपयोग किसी निश्चित मॉड्यूल में किया जाता है, तो उस मॉड्यूल में उस लाइब्रेरी की विशिष्ट कोडिंग शैली (यानी लाइब्रेरी के अपने कोड और प्रलेखन में प्रयुक्त कोडिंग शैली) के अनुरूप होता है।

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


4
क्या सभी पुस्तकालयों को अपने कस्टम सार में लपेटकर इस समस्या से बचना संभव होगा? आपका अपना कोड और सार तब एक एकल कोडिंग शैली का अनुसरण कर सकता है।
मेटाफ़ाइट

मैं जो कुछ कर रहा हूं, उन पुस्तकालयों में बहुत कुछ है। सवाल यह है कि अमूर्त के अंदर उपयोग करने के लिए कोडिंग शैली क्या है।
कार्ल बेवलफेल्ट

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

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

1
"कोडिंग स्टाइल" से आपका क्या तात्पर्य है - साधारण सामान जैसे कि _underscores / camelCase / PascalCase और brace location, या अधिक जटिल चीजें जैसे क्लास / मेथड / फंक्शन लेआउट और अपरिपक्व / कार्यात्मक शैली का उपयोग करना?
इजाकाता

जवाबों:


10

मुझे लगता है कि यह इस बात पर निर्भर करता है कि समग्र परियोजना कितनी बड़ी होगी।

एक चरम पर, मान लें कि आपके पास 1 Mloc प्रोजेक्ट है। इस परियोजना के बड़े हिस्से के लिए, यह संभावना नहीं है कि इसमें शामिल सभी क्षेत्रों में एक एकल व्यक्ति "विशेषज्ञ" होगा। तो इस मामले में, मैं प्रत्येक प्रमुख घटक के लिए मौजूदा कोड शैलियों के साथ रहना चाहूंगा। नए डेवलपर्स एक क्षेत्र चुनेंगे, यह सीखेंगे, और यह संभावना नहीं है कि वे कई अन्य घटकों को देखेंगे जिनमें अलग-अलग कोड शैलियाँ हो सकती हैं।

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

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

किसी भी तरह से, अंतिम निर्णय उस टीम के साथ आराम करना चाहिए जिस पर आप इस पैकेज को एक साथ रख रहे हैं।


कुछ ऐसे आउटलेयर जो ऊपर से मेरे तर्क को शिफ्ट कर सकते हैं:

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

  • यदि सभी शैलियाँ यथोचित रूप से एक-दूसरे के समीप हैं, तो "यहां नया तरीका" घोषित करना और सभी नए कोड और महत्वपूर्ण रीफ़ेक्टरिंग के लिए उपयोग करना आसान हो सकता है। यह समीक्षाओं को थोड़ा दर्द कर सकता है, लेकिन मेरे अनुभव में अधिकांश लोग इस दृष्टिकोण को अपनाने में काफी सक्षम हैं। यह एक गप्पी संकेत भी प्रदान करता है जहां पुराना कोड है।

  • कभी-कभी शैली को भाषा में जोड़ी गई नई कार्यक्षमता के आधार पर स्थानांतरित कर दिया जाता है। C ++ ने वर्षों में कई विशेषताओं को उठाया है। यह एक नई शैली के लिए पुरानी शैली की आवश्यकता के रूप में रिफ्लेक्टर को समझ सकता है जो उन विशेषताओं का लाभ उठाता है।

  • कुछ पुस्तकालयों में विशेष रूप से मुहावरेदार दृष्टिकोण या शैली हो सकती है। यदि हां, तो मैं उस पुस्तकालय के लिए उस शैली के साथ रहना चाहूंगा, भले ही वह परियोजना के बाकी हिस्सों के साथ संघर्ष कर सकता है। यहां आशय यह है कि ऐसी बाधाओं को बढ़ाया जाए जो कोई frobnosticatorsअन्य परियोजनाओं पर काम करता है, वह आपके प्रोजेक्ट पर भी काम करेगा।


कुछ टिप्पणियों ने एक विचार के रूप में अनिवार्य और वस्तु-उन्मुख शैलियों का उल्लेख किया।

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

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

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


इसे लगाने का यह एक अच्छा तरीका है। इसी तरह की परियोजनाएं लगभग 300 केएलओसी हैं।
कार्ल बेज़ेलफेल्ट

3

लगता है कि कम से कम विचार करने के लिए कई परतें हैं:

  1. मौजूदा पुस्तकालयों और उन्हें किसी भी संशोधन।
  2. उन पुस्तकालयों के लिए नई इकाई परीक्षण कोड।
  3. अमूर्त परत।
  4. एपीआई अमूर्त परत द्वारा प्रस्तुत किया गया है।
  5. उदाहरण और परीक्षण कोड अमूर्त परत का उपयोग कर।

मैं यह मानकर चल रहा हूं कि सभी कोड को केवल एक सामान्य शैली तक सामने लाने से कोई मतलब नहीं है - अगर यह आपने किया होता तो आपने सवाल नहीं पूछा होता।

प्रत्येक को बदले में लेना:

  1. मौजूदा कोड-बेस के लिए, फिर आप संभवतः उस शैली से चिपके रहना चाहेंगे।
  2. मौजूदा कोड के लिए नई इकाई परीक्षण कोड एक ग्रे क्षेत्र में खड़ा है, विशेष रूप से इस पर निर्भर करता है कि यह पुराने कोड के साथ कितना एकीकृत है। लेकिन सबसे अधिक संभावना है, मैं इसे 'पसंदीदा शैली' में बनाने की कोशिश करूंगा।
  3. अमूर्त परत में नया कोड। यह सुनिश्चित करके कि यह वास्तव में एक अलग कोड परत है, पसंदीदा शैली का उपयोग करने में कोई कठिनाई नहीं होनी चाहिए, यहां तक ​​कि यह कोड एक विरासत शैली या शैलियों के साथ बहुत अधिक अंतर कर रहा है। अधिकांश कोड को अन्य शैलियों के साथ इंटरफ़ेस करने की आवश्यकता है, और मुझे यह कभी भी समस्या नहीं मिली।
  4. जाहिर है कि एपीआई को स्वयं सबसे अधिक विचार की आवश्यकता है और अधिकतम उपयोगिता आवश्यकताओं को पूरा करना है।
  5. किसी भी उदाहरण या परीक्षण कोड को इसी तरह से पसंदीदा शैली में लिखा जा सकता है। अमूर्तता की पूर्णता पर निर्भर करता है (यानी पूरी तरह से निचली परतों को छिपाता है), यह आसान या मुश्किल हो सकता है। बेशक, यह सुनिश्चित करना कि भावी ग्राहक कोड पठनीय है, आपके प्रमुख उद्देश्यों में से एक होगा।

कुछ चीजें जो मैंने व्यक्तिगत रूप से पाई हैं, वह एक बड़ी विरासत कोड आधार के साथ है:

  • एक पसंदीदा शैली सेट करना और कोड परिवर्तन के लिए लागू करना यह सभी पुराने कोड में नई शैली की ओर पलायन करने के लिए जादुई परिणाम नहीं देता है।

  • अधिकांश इंजीनियर किसी दिए गए पुस्तकालय में मौजूदा शैली में (अधिक या कम) कोड करना पसंद करते हैं। अन्यथा आवश्यकता के परिणामस्वरूप बहुत अधिक प्रवर्तन होता है।

  • एक विरासत पुस्तकालय में एक पसंदीदा शैली की आवश्यकता होती है, जिससे उस पुस्तकालय में शैली में बहुत अधिक असंगति उत्पन्न होती है। तो मानकों के लिए जो प्रस्तुति के आसपास विशुद्ध रूप से हैं, क्योंकि कोड मजबूती के विपरीत यह बहुत कठिन है उन्हें आवश्यकता में बहुत अधिक लाभ मिलता है।

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


0

अगर आप थर्ड पार्टी मॉड्यूल के साथ एक बड़े आकार के प्रोजेक्ट को विकसित कर रहे हैं तो मैं यहाँ @MetaFight से सहमत हूँ।

अपनी समस्या को एक वास्तविक शब्द समस्या से मानचित्रित करें: " मान लीजिए कि आपके घर में शांत जीवन शैली है। आप अपनी जगह को शांत रहना पसंद करते हैं, आप ऐसा करने के लिए अपने परिवार के किसी सदस्य को कभी भी जोर से नहीं बोलते हैं और कभी भी पसंद नहीं करते हैं। लेकिन आप बहुत से लोगों के साथ बातचीत करते हैं। आपके घर के लिए कुछ अलग करने के लिए हर रोज अलग-अलग लोग। जरूरी नहीं कि वे कम आवाज के साथ भी बोलेंगे, ऐसे में आप ऐसे लोगों के साथ काम करते समय खुद को उसके अनुसार ढाल लेते हैं। इन लोगों के लिए इस तरह का इंटरफेस या रैपर बस के लिए अत्यधिक लचीला है। आपका काम हो जाएगा। "गूंगा उदाहरण ... योग्य

लेकिन मेरा कहना है कि ऐसे पुस्तकालयों के लिए रैपर को उनके कोडिंग मानक के अनुसार इस तरह से बनाया जाए कि आप इन रैपरों के माध्यम से इन रैपरों का उपयोग करके अपनी मूल कोडिंग शैली को बनाए रखें।

मेटाफ़ाइट के लिए +1।


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

1
यह क्यों ठुकराया जा रहा है? मुझे स्पष्ट रूप से लगता है कि यह सबसे अच्छा समाधान है :)
मेटाफ़ाइट

0

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

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

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