2012-10-01 15 views
8

MSDN Attributes Tutorial में वे एक विशेषता के लिए एक उदाहरण के रूप Author का उपयोग करें:का उपयोग गुण

[Author("Jane Programmer", Version = 2), IsTested()] 
class Order 
{ 
    // add stuff here ... 
} 

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

[Author("Me")] 
[Description("Add 1 to value")] 
[Param("value", "The original value to add 1 to")] 
public int AddOne(value) {return value + 1;} 

हालांकि कोई भी oftheanswers मैं प्रलेखन और विशेषताओं के बारे में मिल सकता है इस विधि का सुझाव देने लगते हैं। वे सभी इनलाइन दस्तावेज के लिए एक्सएमएल का उपयोग करते हैं।

क्या इनलाइन दस्तावेज़ों में सहायता के लिए कोई अंतर्निहित विशेषता है? यदि नहीं, क्या कोई पुस्तकालय/पैकेज है जिसमें इनलाइन दस्तावेज़ के लिए विशेषताओं के प्री-डिफ़ाइंड सेट शामिल हैं?

+3

बहुत सारे पुस्तकालय और पैकेज हैं जो XML दस्तावेज़टन से निपटते हैं। – Jodrell

+1

क्या आपको वास्तव में प्रतिबिंब द्वारा ऐसी जानकारी खोजने की आवश्यकता है? आप प्रसिद्ध एक्सएमएल दस्तावेज को क्यों गठबंधन नहीं करते हैं, और कुछ स्रोत कोड संस्करण नियंत्रण (svn बिल्कुल दिखा रहा है कि क्या किया गया है)? आपके मामले में, क्या दो डेवलपर्स एक ही विधि/वर्ग बदल गए हैं? –

+0

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

उत्तर

5

विशेषताओं में प्रलेखन रखने से कुछ नुकसान:

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

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

+0

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

+0

तो फिर आपको समस्या * को हल करने के लिए देखना चाहिए * ;-) उचित दस्तावेज़ीकरण पहली जगह अनुशासन का विषय है। स्वरूपण दूसरा है। हालांकि, एक्सएमएल टिप्पणियों से छुटकारा पाने के लिए यह एक उग्र लड़ाई है। शायद आप टाइपिंग एक्सएमएल टिप्पणियों को आसान बनाने के लिए रीस्पर जैसे कुछ सहायक ऐड-ऑन प्राप्त करने के साथ शुरू कर सकते हैं। –

+1

गुणों में प्रलेखन के लिए एक उत्कृष्ट उपयोग केस है: रनटाइम एंड-यूजर दस्तावेज़। उदाहरण के लिए, जब आपके पास कंसोल कमांड का एक बड़ा सेट होता है, तो आप गुणों में विवरणों का विवरण संग्रहीत कर सकते हैं और MyApp --help के लिए इन विवरणों को निकाल सकते हैं। – Tomas

3

यहां प्रश्न यह है कि 'दस्तावेज़ीकरण क्या है?'। यदि आपकी रुचि रखने वाली 'सामान' को प्रतिबिंब द्वारा सुलभ करने की आवश्यकता है तो गुणों का आपका अंतर्निहित समाधान एक समाधान है। लेकिन अगर इरादा दस्तावेज बनाने के लिए मानक दस्तावेज उपकरण का उपयोग करना है तो ऐसा नहीं है।

यहां आवश्यकता समाधान का समाधान करती है। 'दस्तावेज' की आवश्यकता क्या है। शायद गलत सवाल?

0

बस पूर्णता के लिए के लिए यह उल्लेख करने के लिए, परीक्षण परियोजनाओं में तुम कर सकते हो:

[TestProperty(“Author”, “Ducky”)] 
public void SomeTest() 
{ 
     ... 
} 

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