2012-05-22 25 views
5

चलो कहते हैं कि मैं इस तरह एक अंतरफलक है, चलो public void Log(Func<string> message, Logger.Type type) जो भी मुझे पसंद है (सार्वजनिक संशोधक मेह की तरह ...) और वास्तविक लॉगिंग करने के लिए सभी एक्सटेंशन विधियों का उपयोग करें।का प्रयोग विस्तार के तरीकों में ही

अभी तक इतना अच्छा है ... या इतना अच्छा नहीं है? क्या इस दृष्टिकोण में कुछ गड़बड़ है? यदि नहीं, तो क्यों असुविधा: - लेकिन आवश्यकता स्पष्ट रूप से यह करने के लिए this कैसे भाषा के चारों ओर विस्तार तरीकों से काम करता है की सिर्फ एक हिस्सा है

catch (Exception ex) { 
    this.Log(ex); // this works 
    Log(ex); // this goes not 
+0

आप 'लॉग (यह, पूर्व)' भी कॉल कर सकते हैं, जो इस स्थिति में पूरी तरह से अधिक पठनीय लगता है। –

+0

@ हेनकहोल्टरमैन: ठीक है, आपको लॉगर.लॉग (यह, पूर्व) कॉल करना होगा ... –

उत्तर

3

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

सरल नामों के लिए सदस्य लुकअप (सी # 4 spec का सेक्शन 7.6.2) इसे और भी खराब किए बिना पर्याप्त जटिल है। यह न भूलें कि सरल नाम किसी प्रकार या प्रकार पैरामीटर के साथ-साथ एक विधि भी संदर्भित कर सकता है। पहले से ही बहुत कुछ चल रहा है।

जब मैं काम करता हूं तो मैं जांच करूंगा कि धारा 7.6.5.2 (विस्तार विधि आमंत्रण) के आसपास कोई टिप्पणी है या नहीं, जो इसके बारे में "अंदरूनी जानकारी" देती है।


प्रतिबिंब पर, यह करने के लिए लॉगिंग कर संस्था के लिए थोड़ा अजीब प्रतीत होता भी अन्य बातों के प्रवेश करना चाहते हैं - अपवाद के ही तरह मैं इसे देखना होगा उम्मीद थी जब लॉगिंग विफल हो रही है, जिस स्थिति में अपवाद लॉगिंग भी विफल हो जाएगी।

+0

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

+0

@EugeneRyabtsev: ऐसा लगता है कि यह * एक लॉगिंग सदस्य होना चाहिए जो लॉगिंग इंटरफ़ेस को लागू करने के बजाए लॉगिंग कैसे करें, जानता है। यह एक कार्यान्वयन विस्तार है - ऐसा कुछ नहीं है जिसे विज्ञापन की क्षमता के रूप में विज्ञापन किया जाना चाहिए, जो कि इंटरफेस के लिए है। "नेटवर्क पर डेटा प्राप्त करने" से लॉगिंग की चिंताओं को अलग करें। एक वर्ग लिखें जिसका * एकमात्र * नौकरी लॉगिंग हो रहा है, और फिर CoreService के लिए उपलब्ध उस वर्ग का एक उदाहरण बनाएं। –

+0

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

संबंधित मुद्दे