2008-08-21 8 views
36

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

यदि आप एओपी का उपयोग करते हैं तो कृपया हमें बताएं कि आप कौन से टूल्स का उपयोग करते हैं। धन्यवाद!

उत्तर

12

हां।

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

एक उदाहरण: xUnit.net (एक ओपन सोर्स प्रोजेक्ट जो मैं चलाता हूं) में "पहले/बाद" गुणों में एओपी-स्टाइल विधि इंटरसेप्शन का एक रूप है। आप इन परीक्षणों के साथ अपने परीक्षण विधियों को सजाने के लिए, और उस परीक्षण विधि के ठीक पहले और बाद में, आपका कोड कहा जाता है। इसका उपयोग डेटाबेस स्थापित करने और परिणामों को वापस लाने, सुरक्षा संदर्भ को बदलने के लिए, परीक्षण परीक्षण, आदि को बदलने के लिए किया जा सकता है।

एक और उदाहरण: ASP.NET MVC में फ़िल्टर विशेषताएँ विशेष एओपी-शैली विधि इंटरसेप्टर की तरह कार्य करती हैं । उदाहरण के लिए, एक आपको यह कहने की अनुमति देता है कि अगर वे आपकी कार्यवाही में होते हैं तो कितनी अनचाहे त्रुटियों का इलाज किया जाना चाहिए।

कैसल विंडसर और एकता समेत कई निर्भरता इंजेक्शन कंटेनर, इस व्यवहार को "बॉक्स में" या एक्सटेंशन के उपयोग के माध्यम से समर्थन देते हैं।

+1

कुछ दावा करने पर सावधान रहें। कई विशेषज्ञों का मानना ​​है कि क्षमता मॉडल सुरक्षा करने का सबसे अच्छा तरीका है, और यह कि एओपी एक भयानक बात है। –

+0

@ ब्रैड, आप कहते हैं कि कुछ चीजें एओपी के साथ सबसे अच्छी तरह से की जाती हैं। क्या आप समझा सकते हैं कि * पारंपरिक * तरीके की तुलना में एओपी तरीके से * वास्तव में * क्या फायदा है? – Pacerier

3

हमने कुछ समय के लिए मेरी बड़ी परियोजनाओं में से एक में पहलूजे का उपयोग किया। यह परियोजना कई वेब सेवाओं से बना थी, जिनमें से कई कई कार्यों के साथ थे, जो एक जटिल दस्तावेज़ प्रसंस्करण/क्वेरीिंग सिस्टम के लिए फ्रंट एंड था। कोड के लगभग 75k लाइनों के आसपास कहीं। हमने कार्यक्षमता के दो अपेक्षाकृत मामूली टुकड़ों के लिए पहलुओं का उपयोग किया।

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

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

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

15

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

  1. मेरे पास एक वेबसाइट है जिसमें प्रत्येक पृष्ठ एक पायथन फ़ंक्शन द्वारा उत्पन्न होता है।मैं कक्षा लेना चाहता हूं और उस क्लास पासवर्ड-संरक्षित द्वारा उत्पन्न सभी वेबपृष्ठ बनाना चाहता हूं। एओपी बचाव के लिए आता है; प्रत्येक समारोह को कॉल करने से पहले, यदि आवश्यक हो तो मैं उपयुक्त सत्र जांच और पुनर्निर्देशित करता हूं।

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

  3. मेरे पास एक मॉड्यूल या कक्षा गैर-थ्रेड-सुरक्षित कार्यों से भरा है और मुझे लगता है कि मैं इसे कुछ बहु थ्रेडेड कोड में उपयोग कर रहा हूं। कुछ एओपी पुस्तकालय में जाने और कुछ भी बदलने के बिना इन फ़ंक्शन कॉल के आसपास लॉकिंग जोड़ता है।

इस तरह की चीज बहुत बार नहीं आती है, लेकिन जब भी ऐसा होता है, तो बंदरगाह बहुत उपयोगी होता है। पायथन में सजावटी भी हैं जो समान चीजों को पूरा करने के लिए सजावटी डिजाइन पैटर्न (http://en.wikipedia.org/wiki/Decorator_pattern) को लागू करते हैं।

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

1

मैं अपने सी # अनुप्रयोगों में एओपी का भारी उपयोग करता हूं। मैं गुण का उपयोग किए की बहुत बड़ी प्रशंसक नहीं हूँ, इसलिए मैं अपने कोड

4

दूषित किए बिना रनटाइम पर पहलुओं को लागू करने के Terracotta हम साथ और साधन एकीकृत करने के लिए AOP और बाईटकोड उपकरण बहुत बड़े पैमाने पर उपयोग करें कैसल DynamicProxy और बू इस्तेमाल किया तृतीय- पार्टी सॉफ्टवेयर। उदाहरण के लिए, का उपयोग करके हमारे Spring intergration बड़े हिस्से में पूरा किया जाता है। संक्षेप में, हमें उन्हें क्लस्टर करने के लिए विभिन्न बिंदुओं पर स्प्रिंग बीन्स और बीन कारखानों को कॉल को अवरुद्ध करने की आवश्यकता है।

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

4

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

1

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

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

7

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

वसंत ढांचे का उपयोग करने वाले किसी भी व्यक्ति (शायद जावा एंटरप्राइज़ डेवलपर्स का लगभग 50%) एओपी का उपयोग कर रहा है चाहे वे इसे जानते हों या नहीं।

+2

क्या आप वास्तव में समझाते हैं * कैसे * लॉग ([तर्क]] 'अशुद्ध है? क्या * समस्याएं * बनाता है? – Pacerier

1

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

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

1

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

हमारे लिए बहुत अच्छा काम करता है। डेवलपर्स वास्तव में चिंताओं को अलग करने की तरह करते हैं। आर्किटेक्ट्स वास्तव में प्लेटफ़ॉर्म स्तर तर्क को एक स्थान पर समेकित करना पसंद करते हैं।

पोस्टशर्प लाइब्रेरी एक पोस्ट कंपाइलर है जो कोड के इंजेक्शन करता है। इसमें प्री-डिफ़ाइंड इंटरसेप्ट्स की एक लाइब्रेरी है जो मस्तिष्क को लागू करने में आसान है। यह घटना हैंडलरों में तारों की तरह लगता है।

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

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