2009-06-06 18 views
5

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

+0

मैं आपको लगता है कि लंबे समय के नाम पर रखा गया टैग कि वास्तव में काफ़ी काट के लिए इस सवाल का बना लिया है। आप टैक्सोनोमिस्ट बैज को इस तरह से हासिल नहीं करेंगे। –

+0

@Ctrl Alt D-1337 मुझे यकीन नहीं है कि आप किस बारे में बात कर रहे हैं? मैं बैज संग्रह के लिए यहां नहीं हूँ। – Jay

+0

प्रोग्राममी? http://stackoverflow.com/questions/tagged/aspect-oriented-programmi –

उत्तर

13

एओपी अपेक्षाकृत नई अवधारणा है, और बड़ी कंपनियां आम तौर पर नई अवधारणाओं के प्रति सावधान रहती हैं। वे बहुत सारे एओपी कोड से फंसने से डरते हैं और इसे बनाए रखने वाले लोगों को ढूंढने में असमर्थ हैं।

विशिष्ट आलोचना के संबंध में, यह अनौपचारिक या गलत समझा जाता है। एओपी का पूरा बिंदु क्रॉस-कटिंग चिंताओं के क्षेत्र में कोड डुप्लिकेशन को कम करके रखरखाव कार्य को कम करना है। हालांकि, यह सच है कि कोड को समझने में कठिनाई हो सकती है - एओपी के साथ, जब आप किसी विशेष कोड को देखते हैं, तो हमेशा ऐसा मौका होता है कि कहीं और परिभाषित एक पहलू पूरी तरह से अपने व्यवहार को बदल देता है।

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

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

+0

मैंने हाल ही में Google वीडियो पर एओपी (http://video.google.com/videoplay?docid=8566923311315412414) के बारे में एक प्रस्तुति देखी है। वहां, ग्रेगोर किक्सलेस, मूल रूप से कहा गया है कि एओपी आईडीई समर्थन पर निर्भर करता है (यही वही है जो मुझे समझ में आया) और मुझे लगता है कि यह अस्वीकार्य है। –

+1

वास्तव में नहीं। मैं टेक्स्टपैड का उपयोग कर वसंत के साथ एओपी कर सकता हूं। यह सब विन्यास है। एक आईडीई आवश्यक क्यों है? कोड की रखरखाव के लिए आवश्यक – duffymo

+3

@duffymo। आईडीई आपको दिखाएगा कि कोड के किस हिस्से ने पहलुओं को परिभाषित किया है। –

4

एओपी उन चीजों में से एक है जो एक दिलचस्प विचार है कि अभ्यास में बस इतना अच्छा काम नहीं करता है। जावा के पास एक दशक या उससे अधिक समय तक एओपी उपलब्ध था, और इसका उपयोग बहुत अधिक नहीं किया जा रहा है क्योंकि ऐसा लगता है कि यह ठीक से अधिक समस्याएं पेश करता है।

+0

तो एओपी के साथ आपका व्यावहारिक अनुभव क्या है? क्या आप तथ्यों के साथ अपना बयान वापस कर सकते हैं? मेरा अनुभव बिल्कुल अलग है। आम तौर पर एओपी और विशेष रूप से एस्पेक्टजे पिछले पांच सालों में सबसे उपयोगी, सुरुचिपूर्ण और शक्तिशाली उपकरण में से एक हैं। और मेरे लिए यह बहुत अच्छी तरह से काम करता है। :-) – kriegaex

1

मुझे किसी एप्लिकेशन पर कुछ प्रदर्शन अनुकूलन करना पड़ा और मैंने AspectJ में एक कस्टम प्रोफाइलर लिखना चुना। मैं पहले एओपी का उपयोग करने के बारे में संदेह कर रहा था लेकिन मुझे एहसास हुआ कि यह नौकरी के लिए बिल्कुल सही उपकरण था।

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

+0

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

+0

मैं दूसरे पैराग्राफ से असहमत हूं। भले ही यह सिर्फ व्यक्तिगत राय व्यक्त करता है, लेकिन कम से कम गलत होने पर यह कम से कम सामान्यीकृत लगता है। – kriegaex

1

लोग भूल जाते हैं कि जावा एनोटेशन और गुईस और स्प्रिंग जैसे ढांचे में उनका उपयोग एओपी से प्रेरित था। मैं कहूंगा कि जावा एनोटेशन वह जगह है जहां एओपी आज जा रहा है।

+0

मैं असहमत हूं। एनोटेशन अभी भी स्रोत कोड का हिस्सा हैं और मतलब * स्कैटरिंग * है, भले ही कम * उलझन * (क्योंकि टिप्पणियां विधि शरीर से हेडर तक क्रॉस-कटिंग चिंताओं को स्थानांतरित करती हैं), दो प्रभाव जो एओपी आपको छुटकारा पाने में मदद कर सकते हैं। यदि संभव हो तो, मैं अपने पॉइंटकट्स मिलान प्रकारों और हस्ताक्षर बनाने की कोशिश करता हूं, विशेष रूप से पहलू के उपयोग के लिए एनोटेशन नहीं। यदि मौजूदा एनोटेशन हैं जो अन्य ढांचे द्वारा उपयोग किए जाते हैं, ठीक है, तो मैं मिलान के लिए उनका उपयोग करूंगा, लेकिन कोई एओपी-विशिष्ट नहीं। यही कारण है कि मैं एनोटेशन-आधारित @AspectJ वाक्यविन्यास, बीटीडब्ल्यू के लिए सादे AspectJ वाक्यविन्यास पसंद करता हूं। – kriegaex

1

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

यह सच है कि अधिक आईडीई को इसका समर्थन करना चाहिए (मैं आपको जेटब्रेन देख रहा हूं!), जो निश्चित रूप से गोद लेने में मदद करेगा।

3

मुझे बताया गया कि एओपी का मतलब अधिक रखरखाव है!

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

हालांकि किसी भी उपकरण की तरह, आपको इसे सही तरीके से उपयोग करना सुनिश्चित करना होगा। मैं इस तथ्य को हल करने के लिए है कि मेरे AOP प्रवेश inadvertantly decrypted क्रेडिट कार्ड लॉग ऑन होता था:

http://www.agileatwork.com/what-happens-when-you-actually-use-aop-for-logging/