.Net में एक्सटेंशन विधियों का उपयोग करने के लिए सबसे अच्छा अभ्यास क्या हैं?

मैंने इनका उपयोग हर तरह से किया है, और उन पर गलत तरीके से उपयोग करने का आरोप लगाया गया है (हालांकि उस मामले में, मैं उन्हें बिंदु )।

तो, एक्सटेंशन विधियों को नियोजित करने के लिए आपको सबसे अच्छा अभ्यास क्या लगता है?

क्या विकास दल विस्तार विधियों की एक पुस्तकालय बना सकते हैं और उन्हें विभिन्न परियोजनाओं में तैनात कर सकते हैं?

क्या ओपन सोर्स प्रोजेक्ट के रूप में सामान्य विस्तार विधियों का संग्रह होना चाहिए?

अद्यतन: संगठन विस्तृत विस्तृत विधियों लाइब्रेरी बनाने का निर्णय लिया है

0
जोड़ा संपादित
विचारों: 1

6 उत्तर

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

Core.Extensions.Base64Encode(str);

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

0
जोड़ा

मुझे लगता है कि यह विस्तार विधियों के किस उद्देश्य पर निर्भर करता है इस पर निर्भर करता है।

  • एक परियोजना की विशिष्ट व्यावसायिक आवश्यकताओं से संबंधित विस्तार विधियां (चाहे वे मूल डेटा प्रकार या कस्टम ऑब्जेक्ट्स से जुड़े हों) को लाइब्रेरी में शामिल नहीं किया जाना चाहिए जो कई परियोजनाओं में वितरित किया जाएगा।
  • बुनियादी डेटा प्रकारों (int, string, आदि) से संबंधित एक्सटेंशन विधियां या जेनरिक जिनमें व्यापक अनुप्रयोग है, को परियोजनाओं में पैक और वितरित किया जा सकता है।

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

0
जोड़ा
सही है। यह सही है। लेकिन क्या दिशानिर्देश अधिक विशिष्ट होना चाहिए। (उदाहरण के लिए, क्या किसी को ऑब्जेक्ट क्लास का विस्तार करना चाहिए?) क्या आपको तीसरे पक्ष के पुस्तकालयों का विस्तार करना चाहिए?
जोड़ा लेखक Vaibhav, स्रोत

आप http://www.codeplex.com/nxl और http://www.codeplex.com/umbrella जो एक्सटेंशन विधि पुस्तकालय दोनों हैं। मैंने व्यक्तिगत रूप से सोर्स कोड पर नज़र डाली है लेकिन मुझे यकीन है कि लोग आपको कुछ अच्छे पॉइंटर्स देने में सक्षम होंगे।

0
जोड़ा
यह नोट करते हुए कि 2008 के बाद से संदर्भित परियोजनाओं में से कोई भी विकास गतिविधि नहीं हुई है।
जोड़ा लेखक DavidRR, स्रोत

फ्रेमवर्क डिजाइन दिशानिर्देशों की आगामी रिलीज, द्वितीय संस्करण में एक्सटेंशन विधियों को लागू करने के लिए कुछ मार्गदर्शन होगा, लेकिन सामान्य रूप से:

आपको केवल विस्तार विधियों को परिभाषित करना चाहिए "जहां वे अर्थपूर्ण अर्थ बनाते हैं" और प्रत्येक कार्यान्वयन के लिए प्रासंगिक सहायक कार्यक्षमता प्रदान कर रहे हैं।

आपको सिस्टम को विस्तारित करने से भी बचना चाहिए। सभी के रूप में नहीं .नेट भाषा एक्सटेंशन के रूप में विस्तार विधि को कॉल करने में सक्षम होंगे। (उदाहरण के लिए वीबीएनईटी को इसे स्थिर विस्तार वर्ग पर नियमित स्थिर विधि के रूप में कॉल करने की आवश्यकता होगी।)

विस्तारित प्रकार के रूप में एक ही नामस्थान में एक एक्सटेंशन विधि को परिभाषित न करें जबतक कि आप इंटरफ़ेस का विस्तार नहीं कर रहे हों।

एक "असली" विधि के समान हस्ताक्षर के साथ एक एक्सटेंशन विधि को परिभाषित न करें क्योंकि इसे कभी नहीं कहा जाएगा।

0
जोड़ा

Theobjective-clanguage has had "Categories" since the early 1990s; these are essentially the same thing as .NET Extension Methods. When looking for best practices you might want to see what rules of thumbobjective-c(Cocoa & NeXT) developers have come up with around them.

Brent Simmons (the author of the NetNewsWire RSS reader for Mac OS X and iPhone) just posted today about his new style rules for the use of categories and there's been a bit of discussion in the Cocoa community around that post.

0
जोड़ा

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

अधिकांश भाग के लिए मैंने कई कारणों से किसी भी एक्सटेंशन विधि का उपयोग करने से दूर होना शुरू कर दिया है।

मैंने उनका उपयोग बंद करने के कुछ कारणों को उपरोक्त स्कॉट के ब्लॉग लिंक में नोट किया है, जैसे कि "आपके द्वारा स्वामित्व वाले प्रकारों को बढ़ाने से पहले दो बार सोचें"। यदि आपके द्वारा विस्तारित प्रकारों के स्रोत पर आपके पास कोई नियंत्रण नहीं है, तो भविष्य में मुद्दों / टकराव का सामना करना पड़ सकता है यदि स्रोत प्रकार में कुछ परिवर्धन / परिवर्तन हैं, जैसे कि आपकी परियोजना को नए .NET संस्करण में ले जाना। यदि नए .NET संस्करण में आपके एक्सटेंशन के समान नाम के प्रकार पर एक विधि शामिल है, तो किसी को क्लॉब्ड होने जा रहा है।

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

जब कोड के माध्यम से पढ़ते हैं तो आप यह नहीं बता सकते कि विधि एक एक्सटेंशन है या इस प्रकार एक मानक नेट एपीआई विधि है।

इंटेलिजेंस मेनू वास्तव में वास्तव में गन्दा हो सकता है।

0
जोड़ा