एओपी अवधारणाओं ने डमी के लिए समझाया


19

क्या कोई डमी के लिए एओपी अवधारणाओं की व्याख्या कर सकता है: बिंदु, प्वाइंट कट, बुनाई आदि में शामिल हों।

उदाहरण के लिए: पहलू: एक चिंता का एक संशोधन जो कई वर्गों में कटौती करता है। इसका क्या मतलब है?

जवाबों:


15

एक कार्यक्षमता समूह के रूप में एक चिंता के बारे में सोचो जैसे लॉगिंग, ऑडिटिंग, सुरक्षा

ये फ़ंक्शंस कभी-कभी अधिकांश कोड में मौजूद होते हैं, लेकिन वे वास्तव में हमारे जानवर में नहीं रहते हैं-> कुत्ते कक्षाएं - वे कार्यक्षमता हैं जो कई वर्गों में रहना चाहिए - वे क्रॉस कटिंग चिंताओं को पार कर रहे हैं

  • एक Joinpoint कोड में एक जगह है जहाँ पहलू कोड वास्तव में चलता है।

  • एक बिंदु यह कहने का तरीका है कि संयुक्त बिंदु पर कौन सा कोड चलता है।

  • बुनाई - जब कंपाइलर / सिस्टम आपका सामान्य कोड लेता है और इसमें सभी AOP कोड शामिल होते हैं ताकि यह सही कोड आदि को ट्रिगर करे - इसे अतिरिक्त प्री-कंपाइल स्टेप के रूप में सोच सकते हैं।

एक सरल समझने योग्य उदाहरण है:

  1. हम डिबगिंग उद्देश्यों के लिए सभी विधि कॉलों को ट्रैक करना चाहते हैं (यानी हम यह देखना चाहते हैं कि किन तरीकों को किस क्रम में कहा जाता है)।
  2. हम एक पहलू बनाते हैं जो विधि के नाम को लॉग करता है जब इसे बुलाया जाता है
  3. हम पॉइंटकट बनाते हैं जो पहलू को कोड में सभी तरीकों से जोड़ते हैं। अधिकांश AOP फ्रेमवर्क में आप कुछ वाइल्ड कार्ड के साथ आसानी से ऐसा कर सकते हैं
  4. अब हमारे पास हर विधि की लॉगिंग है जिसे कभी भी बुलाया जाता है।

कृपया ध्यान रखें कि शब्दावली अलग-अलग कार्यान्वयन और एओपी रूपरेखा के बीच थोड़ा भिन्न होती है।


जैसे मैं अपना लंबा जवाब लिख रहा था! तुम्हारा होना ज्यादा संक्षिप्त है, मुझे यह पसंद है। स्पष्टता के लिए इसे थोड़ा संपादित करेंगे।
मार्टिज़न वर्बर्ग 16

धन्यवाद, मुझे प्रारूपण नियमों को सीखना चाहिए, भूलते रहना चाहिए।
जोनो

ऐसा लगता है कि पायथन डेकोरेटर्स या लिस्प मैक्रोज़- वाई / एन के साथ लागू करना सरल होगा?
पॉल नाथन

@Paul - या तो आपके द्वारा बताए गए निर्माण से परिचित नहीं है, मुझे डर है और एक त्वरित Google ने मुझे किसी भी तरह से जवाब देने के लिए पर्याप्त जानकारी नहीं दी है।
जोनो

@PaNNathan: AOP गतिशील भाषाओं में बहुत सरल है। एक दोपहर में एक साधारण AOP ढांचा बनाया जा सकता है। संकलित भाषाओं में जावा जीवन इतना मधुर नहीं है।
केविन क्लाइन

-1

क्रमानुसार पढ़ें

प्रत्येक परिभाषा पिछले वाले पर बनाता है।

क्रॉस कटिंग की चिंता

कुछ ऐसा जो आपको (चिंता में) आपको परेशान करता है। जैसे लॉगिंग या सुरक्षा

पहलू

कोड का एक हिस्सा जो आपके मौजूदा कोड से पहले , बाद में , या दोनों ( आसपास ) जोड़ा जाता है

PointCut और JoinPoint

                  Application code
                           |
                           |
                           |
                           |
                          \|/
                           |
JoinPoint  ----------->("before" aspect, on the way in)  // just before your intercepted application code
Pointcut start--------> public String myMethod(params ...)
                   //your application code
Pointcut finish--------> return (foo)
JoinPoint  ----------->("after" aspect, on the way out)  // just after your intercepted application code
                           |
                          \|/
                           |
                           |
                           |
                  Application code

Pointcut

कोड निष्पादन में एक स्थान जहां पहलू का हिस्सा निष्पादित होता है।

JoinPoint

वह बिंदु जहाँ आपका पहलू बिंदु से "जुड़ता है"। "से पहले" joinPoint में आपके पास मापदंडों तक पहुंच होगी, "join" के बाद "joinPoint" में आपके पास वापसी मान तक पहुंच होगी। यदि एक अपवाद को फेंक दिया जाता है, तो आपको इसे संभालने या फिर से फेंकने के लिए "ट्राइ-कैच-आखिर" की आवश्यकता हो सकती है।

बुनाई

एक बिंदु के आसपास पहलुओं को जोड़ने की प्रक्रिया


जिसने भी मेरे जवाब को वोट दिया है, कृपया एक टिप्पणी छोड़ दें - यदि आपको कोई आपत्ति नहीं है। मैं वादा करता हूं कि मैं इस पर बहस शुरू नहीं करूंगा। हालाँकि, मैं जानना चाहता हूँ कि मैं और बेहतर क्या कर सकता था। धन्यवाद!
प्रशांत
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.