प्लग करने योग्य सॉफ़्टवेयर के निर्माण के बारे में कोई क्या करेगा?


20

यदि आपके पास किसी प्रकार का एक आवेदन है और आप चाहते हैं कि आपके उपयोगकर्ता इसके लिए प्लगइन्स लिखने में सक्षम हों, तो आवेदन कैसे डिज़ाइन किया जाना चाहिए?

आपको क्या ध्यान रखना है, इसके लिए कौन से डिज़ाइन पैटर्न हैं?


ऑब्जर्वर, मध्यस्थ, कमांड एड चेन ऑफ रिस्पॉन्सिबिलिटी जैसे पैटर्न दिमाग में आते हैं
Mchl

3
@Mchl: कृपया अपने उत्तर को उत्तर के रूप में दें, टिप्पणी के रूप में नहीं।
एस.लॉट


मुझे लगता है कि इसके लिए पर्याप्त विस्तृत नहीं होना चाहिए
Mchl

@Mchl: "पर्याप्त विस्तृत नहीं"? तो फिर टिप्पणी क्यों? यह स्पष्ट रूप से एक जवाब है। कृपया उत्तर को उत्तर के रूप में पोस्ट करें।
एस.लॉट

जवाबों:


13

यह थोड़े आपके प्लेटफॉर्म पर निर्भर करता है लेकिन कुछ सामान्य बातों को ध्यान में रखता है

वर्जनिंग यदि आप अपने एप्लिकेशन को अपडेट करते हैं, तो क्या सभी पुराने प्लगइन्स अप्रचलित हो जाते हैं (फ़ायरफ़ॉक्स समस्या)

अलगाव प्लगइन्स क्या वे चाहते हैं कर सकते हैं? क्या आप हमेशा उन पर भरोसा करते हैं? या क्या आपको उन्हें किसी प्रकार के सैंडबॉक्स में चलाने और अनुमतियों का अनुरोध करने की आवश्यकता है।

अपडेट आप प्लगइन-अपडेट कैसे संभालते हैं?

सुरक्षा आप एक प्लगइन के लेखक को कैसे सुनिश्चित करते हैं, स्पूफिंग को रोकने या उपयोगकर्ता को दुर्भावनापूर्ण कोड स्थापित करने में धोखा दिया जा रहा है। आमतौर पर किसी प्रकार के कोड-साइनिंग द्वारा हल किया जाता है

सीरियलाइज़ेशन अक्सर जब आप किसी प्रकार के अलगाव का उपयोग करते हैं तो आपको विभिन्न थ्रेड्स या प्रक्रियाओं के बीच जानकारी को क्रमबद्ध करने की आवश्यकता होती है। आप इसे सबसे कुशलता से कैसे करते हैं?

तानाना क्या पहलुओं आप का विस्तार करने की आवश्यकता है? आप बिना एपीआई बने कैसे प्लगइन्स की क्षमता को अधिकतम करते हैं।

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

एक और अच्छी मानसिकता यह सोचने की नहीं है कि "प्लगइन इन सभी चीजों को (कोड में) करेगा, बल्कि" प्लगइन को यह जानकारी प्रदान करने की आवश्यकता है "। इस तरह से आवेदन आवश्यक जानकारी का उपभोग कर सकता है और वास्तविक प्रसंस्करण कर सकता है जो सरल होगा। प्लगइन।

सामान्य तौर पर, जब भी आप एक वर्णनात्मक दृष्टिकोण (मेटाडेटा, जैसे xml) पर जा सकते हैं, कोड के बजाय आपको एक बड़ा फायदा है क्योंकि मेटाडेटा परिवहन, संस्करण, तैनाती, सुरक्षित करने के लिए आसान है और तीसरे पक्ष द्वारा आसानी से कॉन्फ़िगर किया जा सकता है।


1
+1 यह सीधे सवाल का जवाब नहीं देता है, लेकिन इन मुद्दों को ध्यान में रखना जरूरी है
Adriano Carneiro

मेरा मानना ​​है कि इन मुद्दों को कवर किया जाता है इससे पहले कि कोई भी वास्तविक एक्स्टेंसिबिलिटी मैकेनिज्म को विकसित करना शुरू कर दे
Gus

9

मैंने इस कोड प्रोजेक्ट लेख को .NET में एक्स्टेंसिबिलिटी के लिए MEF का उपयोग करने के बारे में लिखा था । यह एक अच्छा परिचय है।

.NET के लिए अन्य एक्स्टेंसिबिलिटी फ्रेमवर्क हैं, जैसे कि SharpDevelop का Add-in Architecture , Mono.Addins और System.AddIn

जावा के लिए, एक्लिप्स प्लग-इन आर्किटेक्चर है

सामान्य पैटर्न यह है:

  • आप होस्ट और एक्सटेंशन के बीच एक अनुबंध (सामान्य रूप से एक इंटरफ़ेस) को परिभाषित करते हैं
  • आपको एक खोज तंत्र की आवश्यकता है जो बाहर जाता है और स्थापित एक्सटेंशन की तलाश करता है
  • आपको एक्सटेंशन को गतिशील रूप से लोड करने और मेजबान को उनके बारे में जागरूक करने में सक्षम होने की आवश्यकता है

व्यवहार में यह डिपेंडेंसी इंजेक्शन और रणनीति पैटर्न के साथ बहुत कुछ साझा करता है।


+1 MEF और System.AddIn दोनों ही अच्छी चीजें हैं। यहां तक ​​कि अगर आप उनका उपयोग नहीं करते हैं, तो वे दोनों अच्छी अवधारणा दिखाते हैं।
रेशनलगीक

@jkohlhepp - मैं सहमत हूं, और मैं SharpDevelop आर्किटेक्चर में एक गहरा गोता लगाने का सुझाव भी दूंगा क्योंकि इसके बारे में बहुत कुछ लिखा गया है, यह खुला स्रोत है (इसलिए MEF, btw) है, और यह अच्छी तरह से डिज़ाइन किया गया है।
स्कॉट व्हिटलॉक

3

आपको केवल प्लगइन्स के लिए एक इंटरफ़ेस प्रदान करने की आवश्यकता है।

इसमें कम से कम एक एक्टिवेट-मेथोड (एक प्रवेश बिंदु) होना चाहिए, लेकिन आप प्रारंभ में भी आदि जैसी चीजें चाहते हैं।

और होस्ट एप्लिकेशन के साथ रजिस्ट्री-जैसे तरीके से संवाद करने की संभावना होनी चाहिए, उदाहरण के लिए मेनू आइटम रजिस्टर करने के लिए। तो प्लगइन्स के लिए परिवर्तनशील / विस्तार योग्य चीजों के लिए रजिस्ट्रियां प्रदान की जानी चाहिए।

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

एक इवेंट-एग्रीगेटर शायद एक अच्छा विचार भी है, इसलिए प्लगइन्स घटनाओं को फेंक सकते हैं और अन्य प्लगइन्स से घटनाओं पर प्रतिक्रिया कर सकते हैं और एक मूक तरीके से होस्ट एप्लिकेशन को। आप निश्चित रूप से एक चाहते हैं!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.