.net - लॉगिंग, आस्पेक्ट ओरिएंटेड प्रोग्रामिंग, और निर्भरता इंजेक्शन-सभी को समझने की कोशिश कर रहा है



unit-testing logging (1)

लॉगिंग एक सेवा नहीं है, यह एक क्रॉस-कटिंग चिंता है । इस प्रकार, यह एक Decorator साथ सबसे अच्छा कार्यान्वित किया गया है। हालांकि, कई अलग-अलग सेवाओं के लॉगिंग को सक्षम करने के लिए बहुत से सजावटकर्ताओं को जोड़ना डीआरवाई का उल्लंघन करता है, इस मामले में आप उन सजावटकर्ताओं को एक ही इंटरसेप्टर में विकसित कर सकते हैं।

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

यह आपको लॉगिंग से कंक्रीट सेवाओं को पूरी तरह से कम करने में सक्षम बनाता है। उस स्थिति में, मैं कहूंगा कि किसी विशेष लॉगिंग फ्रेमवर्क को लपेटने का कोई कारण नहीं है, क्योंकि यदि आप कभी भी लॉगिंग फ्रेमवर्क को बदलना चाहते हैं, तो आप केवल उस इंटरसेप्टर को बदल सकते हैं।

यहां एक उदाहरण दिया गया है जो उपकरण के लिए सजावटी और इंटरसेप्टर्स के बारे में बात करता है (लॉगिंग के समान ही)।

यदि आप एओपी और डीआई के बारे में और जानना चाहते हैं, तो आप गोटो कोपेनहेगन 2010 में दी गई इस बात को ऑनलाइन देख सकते हैं

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

मुझे Common.LoggingCommon.Logging मुखौटा के बारे में पता है जो Common.Logging लिए log4Net, EntLib, NLog की विशेषताओं की एक अच्छी मात्रा को सारणी देने का प्रयास करता है। हालांकि, यहां तक ​​कि हमारे पास अभी भी सामान्य पर निर्भरता है। लॉगिंग। इंटरफेस और ऐसे संबंधों के बारे में कोड / इकाई परीक्षण के तरीके में नहीं, लेकिन यदि परियोजना मर जाती है (यह अंतिम रिलीज के बाद से एक वर्ष से अधिक हो गया है) या आप बाद में एक लॉगर पर स्विच करना चाहते हैं जो समर्थित नहीं है, जिससे समस्याएं पैदा हो सकती हैं।

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

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

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





aop