aop - पहलू उन्मुख प्रोग्रामिंग क्या है?




paradigms (6)

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

function mainProgram()
{ 
   var x =  foo();
   doSomethingWith(x);
   return x;
}

aspect logging
{ 
    before (mainProgram is called):
    { 
       log.Write("entering mainProgram");
    }

    after (mainProgram is called):
    { 
       log.Write(  "exiting mainProgram with return value of "
                  + mainProgram.returnValue);
    }
 } 

aspect verification
{ 
    before (doSomethingWith is called):
    { 
       if (doSomethingWith.arguments[0] == null) 
       { 
          throw NullArgumentException();
       }

       if (!doSomethingWith.caller.isAuthenticated)
       { 
          throw Securityexception();
       }
    }
 }

और उसके बाद कोड को संकलित करने के लिए एक पहलू-वीवर का उपयोग किया जाता है:

function mainProgram()
{ 
   log.Write("entering mainProgram");

   var x = foo();   

   if (x == null) throw NullArgumentException();
   if (!mainProgramIsAuthenticated()) throw Securityexception();
   doSomethingWith(x);   

   log.Write("exiting mainProgram with return value of "+ x);
   return x;
} 

मैं ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग को समझता हूं, और लंबे समय तक ओओ प्रोग्राम लिख रहा हूं। लोग पहलू उन्मुख प्रोग्रामिंग के बारे में बात करते प्रतीत होते हैं, लेकिन मैंने कभी नहीं सीखा है कि यह क्या है या इसका उपयोग कैसे किया जाए। बुनियादी प्रतिमान क्या है?

यह सवाल संबंधित है, लेकिन यह काफी नहीं पूछता है:

पहलू-ओरिएंटेड प्रोग्रामिंग बनाम ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग


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

नेट में एक उदाहरण दिया गया है। यह विधि कॉल को रोकने और सैफ विधि कॉल के बाद कोड निष्पादित करने के लिए प्रॉक्सी कक्षाओं का उपयोग करता है।

ऑटोफैक और डायनामिकप्रॉक्सी का उपयोग करते हुए .NET कोर और सी # में पहलू ओरिएंटेड प्रोग्रामिंग (एओपी)


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


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

मैंने अपनी उम्मीदों को समग्र उन्मुख प्रोग्रामिंग में रखा है , जो कुछ और अधिक यथार्थवादी है। यह कई लोकप्रिय विचारों से जुड़ता है और आपको कुछ वाकई अच्छा देता है।

यहां एक अप और आने वाले कार्यान्वयन को देखें: qi4j.org/

पुनश्च। दरअसल, मुझे लगता है कि एओपी के साथ सुंदरियों में से एक भी इसकी एचिलिस एड़ी है: इसका गैर-घुसपैठ करने वाला, अगर लोग इसे कर सकते हैं तो लोगों को अनदेखा कर दें, इसलिए इसे अधिकांश संगठनों में द्वितीयक चिंता के रूप में माना जाएगा।


पूर्णता (बुजर) के लिए डुप्लिकेट से कॉपी किया गया:

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


स्प्रिंग इन एक्शन से कॉपी किया गया

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