क्या सी # कोडिंग मानकों / सर्वोत्तम प्रथाओं के दस्तावेज़ विकसित करने के लिए कोई सुझाव हैं? [बन्द है]


159

मैं एक हाल ही में AI स्नातक (लगभग 2 साल) एक मामूली ऑपरेशन के लिए काम कर रहा हूं। यह एक बुनियादी (पढ़ें उपयोगी?) C # कोडिंग मानकों के दस्तावेज़ बनाने के लिए मेरे लिए गिर गया है (मुख्य रूप से मैं विभाग में पहला 'दत्तक' हूँ)।

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

मुझे एहसास है कि मैं संभावित रूप से 'चीजों को करने का सबसे अच्छा तरीका' के बारे में असहमति की एक पूरी दुनिया के लिए एक दरवाजा खोल रहा हूं। मैं निर्विवाद रूप से इस तथ्य को समझता और सम्मान करता हूं कि प्रत्येक प्रोग्रामर के पास प्रत्येक व्यक्तिगत कार्य को हल करने का एक पसंदीदा तरीका है, जिसके परिणामस्वरूप मैं कुछ भी लिखने के लिए ऐसा नहीं देख रहा हूं, क्योंकि व्यक्तिगत स्वभाव को रोकना और सामान्य कार्यप्रणाली प्राप्त करना और सहमत होना है। मानकों (उदाहरण के लिए परंपराओं का नामकरण) व्यक्तियों को अधिक पठनीय बनाने में मदद करने के लिए।

तो यहाँ जाता है .... कोई सुझाव? किसी भी पर?

जवाबों:


139

हम शुरुआत करते हैं

और फिर उस आधार रेखा से अंतर और परिवर्धन का दस्तावेज।



26

विडंबना यह है कि वास्तविक मानकों को स्थापित करना आसान हिस्सा होने की संभावना है।

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

आपके पास प्रस्तावों का एक सेट होने के बाद उन्हें प्रतिक्रिया और समीक्षा के लिए टीम को भेजें। फिर से, लोगों को उन सभी में खरीदने के लिए मिलता है।

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

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


14

मैंने हमेशा Juval Lowy के pdf का उपयोग एक संदर्भ के रूप में किया है जब आंतरिक रूप से कोडिंग मानकों / सर्वोत्तम प्रथाओं को करता है। यह FxCop / स्रोत विश्लेषण के बहुत करीब है , जो यह सुनिश्चित करने के लिए एक और अमूल्य उपकरण है कि मानक का पालन किया जा रहा है। इन उपकरणों और संदर्भों के बीच, आपको एक अच्छे मानक के साथ आने में सक्षम होना चाहिए जो आपके सभी डेवलपर्स का अनुसरण करने में बुरा नहीं होगा और उन्हें लागू करने में सक्षम होगा।


9

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

मानक दस्तावेजों को कोड करने में समस्या यह है कि कोई भी उन्हें वास्तव में नहीं पढ़ता है जैसे उन्हें करना चाहिए, और जब वे उन्हें पढ़ते हैं, तो वे उनका पालन नहीं करते हैं। इस तरह के दस्तावेज़ को पढ़ने और उसके अनुसरण की संभावना इसकी लंबाई के साथ भिन्न होती है।

मैं मानता हूं कि FxCop एक अच्छा उपकरण है, लेकिन इसमें से बहुत सारे प्रोग्रामिंग से बाहर ले जा सकते हैं, इसलिए सावधान रहें।


9

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

  1. बंद करना काफी अच्छा है - कोड को मानकों का पालन करने के लिए कोड में परिवर्तन करना समय की बर्बादी है जब तक कोड पर्याप्त नहीं है।
  2. यदि आप कोड बदल रहे हैं तो आपने 'स्थानीय कोडिंग मानकों' का पालन नहीं किया है, अर्थात अपने नए कोड को आसपास के कोड की तरह बनाएं।

ये दो बिंदु मेरी इच्छा के लिए वास्तविकता हैं कि हर कोई एक समान दिखने वाला कोड लिखेगा।


8

मैंने निम्नलिखित दस्तावेज को बहुत उपयोगी और संक्षिप्त पाया। यह idesign.net साइट से आता है और इसे Juval Lowy ने लिखा है

C # कोडिंग मानक

NB: उपरोक्त लिंक अब मर चुका है। .Zip फ़ाइल को प्राप्त करने के लिए आपको उन्हें अपना ईमेल पता देने की आवश्यकता है (लेकिन वे इसका विपणन के लिए उपयोग नहीं करेंगे ... ईमानदारी से) यहाँ कोशिश करें


5

मैंने अभी एक ऐसे स्थान पर शुरुआत की है जहां कोडिंग मानक सदस्य चर के लिए m_, पैरामीटरों के लिए p_ और प्रकारों के लिए उपसर्गों, जैसे स्ट्रिंग्स के लिए 'str' के उपयोग को अनिवार्य करता है। तो, आपके पास एक विधि के शरीर में ऐसा कुछ हो सकता है:

m_strName = p_strName;

भयानक। वास्तव में भयानक।


1
Visual Studio 2010 में IntelliSense आपको "नाम" टाइप करने देता है और यह सब-स्ट्रिंग से मेल खाएगा p_strName- इसे 10% कम दर्दनाक बनाता है जब आप इस तरह के घृणा के साथ काम करने के लिए मजबूर होते हैं। : ओ
सैम हरवेल

5

मैं सूची में कोड पूरा 2 जोड़ूंगा (मुझे पता है कि जेफ यहां एक प्रशंसक है) ... यदि आप एक जूनियर डेवलपर हैं, तो पुस्तक आपके दिमाग को इस तरह सेट करने के लिए काम आती है जो सबसे अच्छे के लिए नींव सेट करती है कोड राइटिंग प्रैक्टिस और सॉफ्टवेयर बिल्डिंग।

मुझे यह कहना होगा कि मैं अपने करियर में थोड़ा देर से आया, लेकिन यह मेरे पेशेवर जीवन में कोडिंग और फ्रेमवर्क विकास के बारे में बहुत सारे तरीके बताता है।

यह जाँच के लायक है;)


2
मैं उसी पुस्तक का सुझाव देने वाला था। एक अवश्य पढ़ने की बात।
पास्कल पारादिस

मैं पुस्तक पढ़ने की प्रक्रिया में हूँ, पढ़ें> 67%। मैंने प्रोग्रामिंग में संशोधन करने के तरीके को बदल दिया। जरूर पढ़े।
उर्सुलरोसु

4

Microsoft के अपने नियम एक उत्कृष्ट प्रारंभिक बिंदु हैं। आप उन्हें FxCop के साथ लागू कर सकते हैं।


4

मुझे Microsoft के StyleCop को मानक के रूप में लागू करने के लिए लुभाया जाएगा। इसे बिल्ड टाइम पर लागू किया जा सकता है। लेकिन अगर आपके पास विरासत कोड है, तो नए कोड पर स्टाइलकॉप का उपयोग करें।

http://code.msdn.microsoft.com/sourceanalysis

आखिरकार इसमें सफाई कोड के लिए एक रिफ्लेक्टर विकल्प होगा।

http://blogs.msdn.com/sourceanalysis/


2
आप स्टाइलकॉप द्वारा लागू की गई हर चीज से सहमत नहीं हो सकते हैं, लेकिन विचार करें कि Microsoft एक मानक की ओर बढ़ रहा है, जैसा कि स्टाइलकॉप द्वारा लागू किया गया है - इसलिए यह मानकों का एक सेट है जिससे आप अन्य डेवलपर्स से परिचित होने की उम्मीद कर सकते हैं। उद्योग के बाकी हिस्सों के साथ संगति मूल्यवान हो सकती है।
बेवन

4

व्यक्तिगत रूप से मुझे वह पसंद है जो IDesign ने एक साथ रखा है। लेकिन इसीलिए मैं पोस्ट कर रहा हूँ ...

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

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

ध्यान में रखने के लिए एक और टुकड़ा खरीद-इन और प्रवर्तन है। कोडिंग मानक महान हैं। लेकिन अगर कोई उनके साथ सहमत नहीं है और (शायद अधिक महत्वपूर्ण बात) कोई भी उन्हें लागू नहीं करता है तो यह सब शून्य है।


4

जैसा कि मैंने फिलिप्स मेडिकल सिस्टम के लिए प्रकाशित एक और http://csharpguidelines.codeplex.com पर प्रकाशित दोनों लिखा है , मैं थोड़ा पक्षपाती हो सकता हूं, लेकिन मेरे पास लेखन, मेन्टेनिंग और कोडिंग मानकों के प्रचार पर 10 से अधिक वर्ष हैं। मैंने एक कोडप्लैक्स को विचारों में भिन्नता को ध्यान में रखते हुए लिखने की कोशिश की है और आपके विशेष संगठन में उस से निपटने के लिए परिचय का अधिकांश हिस्सा खर्च किया है। इसे पढ़ें और मुझे प्रतिक्रिया प्रदान करें .....


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

मैंने देखा। मेरा वास्तव में मतलब है, अच्छा काम करते रहना और मैं इस गाइड को कम से कम गंभीर .NET देवों के लिए शुरुआती बिंदु के रूप में सुझाता हूं।
atconway

1
काम के महान टुकड़े के लिए +1, काश मैं +100 कर पाता। यह संक्षिप्त है, इसलिए लोग वास्तव में इसे पढ़ेंगे - इसलिए यह Microsoft और IDesign मानकों को जीतता है। इसे सार्थक नियम के नाम, एक चीट शीट, वीएस / आर # के लिए एक स्टाइल फाइलें मिलीं ... शायद एक चीटशीट में अधिक व्यापक उदाहरणों को याद कर रहे हैं :)
विक्टर सर्जेनको

2

SSW नियम

इसमें कुछ C # मानक + एक पूरी बहुत अधिक शामिल हैं .... मुख्य रूप से Microsoft डेवलपर्स पर केंद्रित है


1

आपको असफल होने की सबसे अधिक संभावना है। उद्योग में आपका स्वागत है।

मैं असहमत हूं - इसलिए जब तक वह दस्तावेज बनाता है, तब तक सबसे बुरा यह हो सकता है कि वह सभी को भूल जाए।

यदि अन्य लोगों के पास सामग्री के साथ समस्या है, तो आप उन्हें यह दिखाने के लिए इसे अपडेट करने के लिए कह सकते हैं कि वे क्या पसंद करेंगे। इस तरह से यह आपकी प्लेट से दूर है, और दूसरों की जिम्मेदारी है कि वे अपने परिवर्तनों को सही ठहराएं।


मैं असहमत हूं। सबसे खराब यह हो सकता है कि दिशानिर्देश असंगत हैं; और कीड़े फिसल जाते हैं। यदि वह एलएचसी के लिए नियंत्रण सॉफ्टवेयर लिखता है, तो हम फ़ेल करेंगे। /
सरकास्म


1

मैं फ्रांसेस्को बलेना पुस्तक " प्रैक्टिकल गाइडलाइन्स और वीबी और सी # डेवलपर्स के लिए सर्वश्रेष्ठ अभ्यास " का बहुत बड़ा प्रशंसक हूं ।

यह बहुत विस्तृत है और सभी आवश्यक विषयों को शामिल किया गया है, यह आपको केवल नियम नहीं देता है, बल्कि नियम के पीछे का कारण भी बताता है, और यहां तक ​​कि एक विरोधी नियम भी प्रदान करता है जहां दो विपरीत सर्वोत्तम अभ्यास हो सकते हैं। केवल नकारात्मक पक्ष यह है कि यह .NET 1.1 डेवलपर्स के लिए लिखा गया था।


1

हमारे पूरे कोडिंग मानक मोटे तौर पर पढ़ते हैं, "स्टाइलकॉप का उपयोग करें।"



1

मुझे dotnetspider.com दस्तावेज़ का सुझाव देना है ।
यह एक महान और विस्तृत दस्तावेज है जो कहीं भी उपयोगी है।


1

मैं overkill Juval के का उपयोग किया है और इससे पहले कि के नहीं तो के माध्यम से, लेकिन मैं आलसी हूँ और अब बस की इच्छा के अनुरूप Resharper



0

मुझे लगता है कि मैं अन्य टिप्पणियों को यहां पर प्रतिध्वनित करता हूं कि एमएस दिशानिर्देश पहले से ही जुड़े हुए हैं एक उत्कृष्ट प्रारंभिक बिंदु हैं। मैं अपना कोड मोटे तौर पर उन पर मॉडल करता हूं।

यह दिलचस्प है क्योंकि मेरे प्रबंधक ने मुझे अतीत में बताया है कि वह उनके लिए बहुत उत्सुक नहीं है: डी

तुम्हारे आगे एक मजेदार काम है मेरे दोस्त। शुभकामनाएँ, और कृपया पूछें कि क्या आपको कुछ और चाहिए :)


0

फिलिप्स मेडिकल सिस्टम से मानक अच्छी तरह से लिखा गया है, और ज्यादातर Microsoft दिशानिर्देशों का पालन करता है: www.tiobe.com/content/paperinfo/gemrcsharpcs.pdf

मेरे मानक इस पर कुछ ट्वीक्स के साथ आधारित हैं, और .NET 2.0 के लिए कुछ अपडेट (फिलिप्स मानक .NET 1.x के लिए लिखा गया है, इसलिए यह थोड़ा दिनांकित है)।



0

मेरे द्वारा लिखे गए कोड में मैं आमतौर पर सार्वजनिक रूप से उजागर एपीआई और निजी सदस्य आवरण और इंडेंटेशन के लिए मोनो कोडिंग दिशानिर्देशों के लिए .NET फ्रेमवर्क डिज़ाइन दिशानिर्देशों का पालन करता हूं । मोनो .NET का एक खुला स्रोत कार्यान्वयन है, और मुझे लगता है कि वे लोग अपने व्यवसाय को जानते हैं।

मुझे लगता है कि Microsoft कोड ने अंतरिक्ष को कैसे बर्बाद किया है:

try
{
    if (condition)
    {
        Something(new delegate
        {
            SomeCall(a, b);
        });
    }
    else
    {
        SomethingElse();
        Foobar(foo, bar);
    }
}
catch (Exception ex)
{
    Console.WriteLine("Okay, you got me");
}

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

मुझे यह भी पसंद है कि वे कोष्ठक खोलने से पहले एक स्थान कैसे रखते हैं।

try {
        if (condition) {
                Something (new delegate {
                        SomeCall (a, b);
                });
        } else {
                SomethingElse ();
                Foobar (foo, bar);
        }
} catch (Exception ex) {
        Console.WriteLine ("Okay, you got me");
}

लेकिन कृपया, ऐसा कुछ भी लागू न करें, यदि आपके सहकर्मी इसे नापसंद करते हैं (जब तक कि आप मोनकरू;

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