मैं एक आगामी परियोजना के लिए क्लाइंट साइड कार्यान्वयन प्रौद्योगिकी के रूप में एडोब आकाशवाणी को चुनने का सोच रहा हूँ के साथ एक प्लगइन वास्तुकला का निर्माण। (पिछली पसंद सी # और डब्ल्यूपीएफ थी, लेकिन मैं हाल ही में फ्लैश/फ्लेक्स/एआईआर से प्रभावित हूं।)Adobe AIR
लेकिन मेरे उत्पाद की सबसे महत्वपूर्ण विशेषताओं में से एक इसकी प्लगइन आर्किटेक्चर होगी, जिससे तीसरे पक्ष के डेवलपर्स को दिलचस्प तरीकों से कार्यक्षमता और जीयूआई का विस्तार करें।
मुझे पता है कि मैं सी # में वास्तुकला डिजाइन चाहते हैं: प्लग-इन लोडर विधानसभाओं के सभी स्थानीय "एप्लिकेशन/plugins /" निर्देशिका में गणना होगी। प्रत्येक असेंबली के लिए, यह "IPluginFactory" इंटरफेस के कार्यान्वयन की तलाश में सभी वर्गों की गणना करेगा। फैक्ट्री द्वारा बनाई गई प्रत्येक प्लगइन के लिए, मैं इसे अपने एमवीसी कक्षाओं के लिए पूछूंगा, और मौजूदा जीयूआई लेआउट में उचित स्लॉट में अपने जीयूआई तत्व (मेनू आइटम, पैनल इत्यादि) को स्नैप कर दूंगा।
मैं (स्थानीय फाइल सिस्टम से लोड हो रहा है प्लग इन, वेब से नहीं) आकाशवाणी के भीतर इसी कार्य को पूरा करना चाहते हैं। this article पढ़ने के बाद, मेरी समझ यह है कि यह संभव है, और मूल आर्किटेक्चर (एसडब्ल्यूएफ को सैंडबॉक्स किए गए एप्लिकेशनडोमेन आदि में लोड करना) उसी तरह से है जैसा आप इसे .NET में करेंगे।
लेकिन मैं gotchas के बारे में उत्सुक हूँ।
यदि आप में से किसी ने फ़्लैश प्लेयर (अधिमानतः मिश्रित फ्लैश/फ्लेक्स ऐप्स में, और विशेष रूप से एआईआर होस्ट के भीतर) के साथ कोई गतिशील क्लासलोडिंग किया है, तो मुझे आपके प्लगइन ढांचे के निर्माण के अनुभवों के बारे में सुनना अच्छा लगेगा और आप कहां से फ़्लैश प्लेयर, और फ्लैश, फ्लेक्स और एआईआर एपीआई के साथ मुश्किल परिस्थितियों में भाग गया।
उदाहरण के लिए, अगर किसी ने मुझे यह प्रश्न पूछा है, लेकिन जावा प्लेटफ़ॉर्म के साथ, मैं निश्चित रूप से उल्लेख करता हूं कि JVM में "मॉड्यूल" या "असेंबली" की कोई धारणा नहीं है। एकत्रीकरण का उच्चतम स्तर "वर्ग" है, इसलिए बड़ी परियोजनाओं के प्रबंधन के लिए प्लगइन सिस्टम के भीतर संगठनात्मक संरचनाएं बनाना मुश्किल हो सकता है। मैं कई क्लासलोडर्स के साथ मुद्दों के बारे में भी बात करता हूं और कैसे प्रत्येक लोड किए गए वर्ग के अपने अलग-अलग उदाहरण को बनाए रखता है (अपने स्वयं के अलग-अलग स्थिर वार्स के साथ)।
यहाँ कुछ विशिष्ट प्रश्न अभी भी मेरे लिए अनुत्तरित हैं:
1) actionscript "लोडर" वर्ग एक ApplicationDomain में एक SWF लोड कर सकते हैं। लेकिन उस एपडोमेन में वास्तव में क्या होता है? मॉड्यूल? क्लासेस? एमएक्सएमएल घटकों का प्रतिनिधित्व कैसे किया जाता है? मैं अपने प्लगइन इंटरफेस को लागू करने वाले सभी वर्गों को कैसे ढूंढूं?
2) यदि आप मुख्य आवेदन से एक अलग ApplicationDomain में एक प्लगइन लोड किया है, तो यह काफी अधिक जटिल है कि अन्य appdomain के भीतर से कोड कॉल करने के लिए है? क्या इंटर-एपडोमेन मार्शलिंग परत से गुज़रने वाले डेटा के प्रकार के बारे में कोई महत्वपूर्ण सीमाएं हैं? Marshalling निषिद्ध रूप से महंगा है?
3) आदर्श रूप में, मैं प्लगइन के रूप में अपने मुख्य कोड का अधिकांश हिस्सा विकसित करना चाहता हूं (मुख्य एप्लिकेशन प्लगइन लोडिंग खोल से थोड़ा अधिक है) और प्लगइन आर्किटेक्चर का उपयोग उस कार्यक्षमता को बढ़ाने के लिए करें एप्लिकेशन। क्या यह आपके दिल में डरता है?
बहुत अच्छा। क्या आपका प्लगइन एपीआई ओपन सोर्स है? – benjismith
नहीं, और यहां तक कि अगर यह भी था, तो यह ऐप के लिए काफी विशिष्ट है जिसे इसके लिए लिखा गया था। इसके बारे में "जेनेरिक" सबकुछ जो मैंने लिखा है, उसमें काफी समझाया गया है। – hasseg
गोचा। मैं आपके लिंक पर एक नज़र डालेगा। (केवल पिछले हफ्ते फ्लेक्स के साथ शुरू किया गया है, इसलिए मुझे अभी तक फ्लेक्स मॉड्यूल के बारे में बहुत कुछ पता नहीं है।) एक और सवाल, हालांकि ... एक प्लग करने योग्य एआईआर ऐप में, मैं चाहता हूं कि उपयोगकर्ता * इंस्टॉल * प्लगइन इंस्टॉल कर सकें। एआईआर के मानक इंस्टॉलर को देखते हुए, आप इसे संभालने की सिफारिश कैसे करेंगे? – benjismith