aop - क्या आप उत्पादन सॉफ्टवेयर में एओपी(पहलू उन्मुखी प्रोग्रामिंग) का उपयोग करते हैं?




paradigms (7)

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

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


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

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

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

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

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

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


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

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

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

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


मैं अपने C # अनुप्रयोगों में अत्यधिक एओपी का उपयोग करता हूं मैं एट्रिब्यूट्स का उपयोग करने का एक बड़ा प्रशंसक नहीं हूं, इसलिए मैंने अपने कोड को प्रदूषित किए बिना रनटाइम पर पहलुओं को लागू करने के लिए कैसल डायनेमिक प्रोक्सी और बू का इस्तेमाल किया


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

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


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

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


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

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


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

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

पोस्टशहर लाइब्रेरी एक पोस्ट कंपाइलर है जो कोड का इंजेक्शन करता है। इसमें पूर्व परिभाषित छंदों की एक लाइब्रेरी है, जो मस्तिष्क मृत को लागू करने में आसान है। यह घटना संचालकों में तारों की तरह लगता है।