यदि आपके पास किसी प्रकार का एक आवेदन है और आप चाहते हैं कि आपके उपयोगकर्ता इसके लिए प्लगइन्स लिखने में सक्षम हों, तो आवेदन कैसे डिज़ाइन किया जाना चाहिए?
आपको क्या ध्यान रखना है, इसके लिए कौन से डिज़ाइन पैटर्न हैं?
यदि आपके पास किसी प्रकार का एक आवेदन है और आप चाहते हैं कि आपके उपयोगकर्ता इसके लिए प्लगइन्स लिखने में सक्षम हों, तो आवेदन कैसे डिज़ाइन किया जाना चाहिए?
आपको क्या ध्यान रखना है, इसके लिए कौन से डिज़ाइन पैटर्न हैं?
जवाबों:
यह थोड़े आपके प्लेटफॉर्म पर निर्भर करता है लेकिन कुछ सामान्य बातों को ध्यान में रखता है
वर्जनिंग यदि आप अपने एप्लिकेशन को अपडेट करते हैं, तो क्या सभी पुराने प्लगइन्स अप्रचलित हो जाते हैं (फ़ायरफ़ॉक्स समस्या)
अलगाव प्लगइन्स क्या वे चाहते हैं कर सकते हैं? क्या आप हमेशा उन पर भरोसा करते हैं? या क्या आपको उन्हें किसी प्रकार के सैंडबॉक्स में चलाने और अनुमतियों का अनुरोध करने की आवश्यकता है।
अपडेट आप प्लगइन-अपडेट कैसे संभालते हैं?
सुरक्षा आप एक प्लगइन के लेखक को कैसे सुनिश्चित करते हैं, स्पूफिंग को रोकने या उपयोगकर्ता को दुर्भावनापूर्ण कोड स्थापित करने में धोखा दिया जा रहा है। आमतौर पर किसी प्रकार के कोड-साइनिंग द्वारा हल किया जाता है
सीरियलाइज़ेशन अक्सर जब आप किसी प्रकार के अलगाव का उपयोग करते हैं तो आपको विभिन्न थ्रेड्स या प्रक्रियाओं के बीच जानकारी को क्रमबद्ध करने की आवश्यकता होती है। आप इसे सबसे कुशलता से कैसे करते हैं?
तानाना क्या पहलुओं आप का विस्तार करने की आवश्यकता है? आप बिना एपीआई बने कैसे प्लगइन्स की क्षमता को अधिकतम करते हैं।
यदि आप प्लग-इन के लिए तृतीय-पक्ष डेवलपर्स को लक्षित कर रहे हैं, तो मैं सबसे महत्वपूर्ण बात यह कहूंगा कि (मेरे अनुभव से) प्लगइन एपीआई और कक्षाओं को बाकी एप्लिकेशन से पूरी तरह से अलग देखना है, और इसे विकसित करना आसान है यथासंभव। यह मुख्य ऐप से आर्किटेक्चर के लिए प्लगइन्स में "ब्लीड ओवर" करने के लिए बहुत आसान है ताकि प्लगइन लेखकों को उनसे अधिक सीखना पड़े। उनके लिए इसे आसान बनाएं, यह सोचें कि एक प्लगइन लेखक के रूप में आप किस तरह का इंटरफ़ेस और अनुभव चाहते हैं।
एक और अच्छी मानसिकता यह सोचने की नहीं है कि "प्लगइन इन सभी चीजों को (कोड में) करेगा, बल्कि" प्लगइन को यह जानकारी प्रदान करने की आवश्यकता है "। इस तरह से आवेदन आवश्यक जानकारी का उपभोग कर सकता है और वास्तविक प्रसंस्करण कर सकता है जो सरल होगा। प्लगइन।
सामान्य तौर पर, जब भी आप एक वर्णनात्मक दृष्टिकोण (मेटाडेटा, जैसे xml) पर जा सकते हैं, कोड के बजाय आपको एक बड़ा फायदा है क्योंकि मेटाडेटा परिवहन, संस्करण, तैनाती, सुरक्षित करने के लिए आसान है और तीसरे पक्ष द्वारा आसानी से कॉन्फ़िगर किया जा सकता है।
मैंने इस कोड प्रोजेक्ट लेख को .NET में एक्स्टेंसिबिलिटी के लिए MEF का उपयोग करने के बारे में लिखा था । यह एक अच्छा परिचय है।
.NET के लिए अन्य एक्स्टेंसिबिलिटी फ्रेमवर्क हैं, जैसे कि SharpDevelop का Add-in Architecture , Mono.Addins और System.AddIn ।
जावा के लिए, एक्लिप्स प्लग-इन आर्किटेक्चर है ।
सामान्य पैटर्न यह है:
व्यवहार में यह डिपेंडेंसी इंजेक्शन और रणनीति पैटर्न के साथ बहुत कुछ साझा करता है।
आपको केवल प्लगइन्स के लिए एक इंटरफ़ेस प्रदान करने की आवश्यकता है।
इसमें कम से कम एक एक्टिवेट-मेथोड (एक प्रवेश बिंदु) होना चाहिए, लेकिन आप प्रारंभ में भी आदि जैसी चीजें चाहते हैं।
और होस्ट एप्लिकेशन के साथ रजिस्ट्री-जैसे तरीके से संवाद करने की संभावना होनी चाहिए, उदाहरण के लिए मेनू आइटम रजिस्टर करने के लिए। तो प्लगइन्स के लिए परिवर्तनशील / विस्तार योग्य चीजों के लिए रजिस्ट्रियां प्रदान की जानी चाहिए।
साथ ही, होस्ट एप्लिकेशन के डेटा और ऑब्जेक्ट्स के लिए कुछ सुलभ भंडारण होना चाहिए, इसलिए प्लगइन्स इसकी दिनचर्या को कॉल कर सकते हैं। यह आसानी से डि-कंटेनर जैसे यूनिटी का उपयोग करके और प्लगइन्स को इसे एक्सेस करने से आसानी से किया जा सकता है, इसलिए वे उन सेवाओं को हल कर सकते हैं जिनकी उन्हें आवश्यकता है।
एक इवेंट-एग्रीगेटर शायद एक अच्छा विचार भी है, इसलिए प्लगइन्स घटनाओं को फेंक सकते हैं और अन्य प्लगइन्स से घटनाओं पर प्रतिक्रिया कर सकते हैं और एक मूक तरीके से होस्ट एप्लिकेशन को। आप निश्चित रूप से एक चाहते हैं!