2011-08-16 11 views
5

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

समाधान एक परिभाषित करने के लिए सबसे अच्छा तरीका है। प्लगइन्स इन इंटरफेस को लागू करना चाहिए।

समाधान बी: ​​
कुछ अमूर्त वर्ग है जो सार्वजनिक रूप से उपलब्ध हैं परिभाषित करें। प्लगइन्स विरासत में होना चाहिए और इन वर्गों पर अमूर्त तरीकों को ओवरराइड करना चाहिए।

समाधान सी:rcravens
दर्रा इंटरफेस के आसपास कोड के अंदर, एक अमूर्त वर्ग जो सार्वजनिक रूप से प्लगइन तानाना के लिए अनुमति देने के लिए उपलब्ध है बनाएँ। चुना गया
यह समाधान केवल इंटरफ़ेस से पहले चुना गया था क्योंकि यह मूल कार्यान्वयन (इस मामले में आसान) को सक्षम बनाता है। इसे केवल अमूर्त वर्ग से पहले चुना गया था क्योंकि यह कोड के भीतर मॉकिंग सक्षम बनाता है। संरचना ढांचे उत्कृष्ट हैं, लेकिन इस एप्लिकेशन के रूप में हल्के वजन के लिए शीर्ष पर थोड़ा सा है जहां केवल सीमित विस्तारशीलता वांछित है।

समाधान डी:Jay और Chris Shain
(जैसे Managed Extensibility Framework(MEF) के रूप में) एक संरचना ढांचे को लागू करें और इसके चारों ओर

किसी भी नए समाधान दिखाई देते हैं, मैं उन्हें इस सूची में जोड़ना होगा निर्माण। जवाब

अग्रिम धन्यवाद,
टेक टेस्ट Dude

+0

एमईएफ और एमएएफ के बारे में क्या? जब आप अनुवाद के बारे में बात करते हैं तो मुझे नहीं पता कि आप क्या मतलब रखते हैं, लेकिन एमईएफ और एमएएफ (संभावित रूप से कुछ सामान्य डी सामान से समृद्ध) समग्र अनुप्रयोगों के निर्माण के लिए बनाए जाते हैं। आप प्रिज्म (समग्र WPF) कोड को स्किम पढ़ना चाहते हैं, पूरी सामग्री समग्र अनुप्रयोग उर्फ ​​मॉड्यूल/प्लगइन्स के बारे में है। यदि आप वेब अनुप्रयोगों के बारे में बात कर रहे हैं तो ऑर्चर्ड सीएमएस का स्रोत भी दिलचस्प हो सकता है। इन लोगों ने एएसपी.नेट एमवीसी के शीर्ष पर एक अच्छा प्लगइन आधारभूत संरचना बनाई है। – Jay

+0

प्रश्न में आवेदन एक सर्वर पर बैठे एक webservice है। विचार यह है कि कई लोग 'अनुवाद' के लिए फाइलें प्रदान कर सकते हैं और कुछ लोग प्लगइन प्रदान कर सकते हैं। जब लोग अपनी फाइलें प्रदान करते हैं, तो वे चुनेंगे कि किस प्लगइन का इस्तेमाल 'अनुवाद' करने के लिए किया जाना चाहिए। वास्तविक यूआई अंत (डब्ल्यूपीएफ, एमवीसी, इत्यादि) अभी इस मुद्दे पर नहीं है। मैं अब तक पूर्व-रक्षा ढांचे से दूर रहा हूं क्योंकि वे काफी असहनीय होने की ओर रुख करते हैं। अगर मैं त्रुटि में हूं तो मुझे सही करें –

+0

अभी तक एमएएफ के साथ काम नहीं किया है और यह नहीं पता कि यह अभी भी एमएस द्वारा बनाए रखा गया है, लेकिन मुझे लगता है कि कम से कम एमईएफ को आवश्यक बुनियादी ढांचा प्रदान करना चाहिए। यह जीयूआई सामान तक ही सीमित नहीं है। हालांकि मुझे लगता है कि @ क्रिस शैन सही है, पहिया को फिर से न लगाएं। बीटीडब्ल्यू: सुरक्षा के बारे में क्या? मेरा मतलब है कि कोई प्लगइन के रूप में दुर्भावनापूर्ण कोड अपलोड कर सकता है। लगता है कि एक सैंडबॉक्स की आवश्यकता है। – Jay

उत्तर

3

निम्नतम स्तर पर (फायदे और सीमा के साथ संभवतः) व्यक्ति के लिए सबसे अच्छा में सक्षम है के लिए जाना जाएगा उनके समाधान का औचित्य साबित मेरा मानना ​​है कि आप इंटरफेस की जरूरत है । यह सबसे मजाकिया ढांचे को आसानी से नकली प्रदान करने की अनुमति देता है। आपके कोड के आसपास आपको इंटरफेस के चारों ओर गुजरना चाहिए। यदि आपको कुछ आधार कार्यान्वयन की आवश्यकता है जिसे एक सार आधार वर्ग में दोबारा क्रियान्वित किया जा सकता है, तो इसे करें। सार आधार वर्ग और इंटरफेस परस्पर अनन्य अवधारणाएं नहीं हैं। कुछ बार यह दोनों समझने के लिए समझ में आता है।

+0

तो उदाहरण के तौर पर, मेरे पास 'इट्रांसलेटर 'होगा जो अनुवाद के लिए सभी मान्य विधियों की घोषणा करेगा, और एक सार वर्ग TranslatorBase जो कुछ बुनियादी कार्यान्वयन की घोषणा करता है। समस्या तब उत्पन्न होती है जब मैं डीएलएल के भीतर कार्यान्वयन की तलाश करने के लिए प्रतिबिंब का उपयोग करना शुरू करता हूं। क्या मैं सिर्फ 'इट्रांसलेटर' कार्यान्वयन की खोज करता हूं? या क्या मुझे वास्तव में उन्हें 'ट्रांसलेटरबेस' का उत्तराधिकारी होना चाहिए? इनमें से कौन सा सार्वजनिक है, और जो आंतरिक रूप से उपयोग करने के लिए है? आपके उत्तर के लिए धन्यवाद –

+0

कृपया मुझे बताएं कि क्या मैंने इस प्रश्न में किए गए संपादन को आपके उत्तर –

3

मुझे नहीं लगता कि इंटरफेस या अमूर्त वर्ग के बीच एक बेहतर समाधान है, यह वास्तव में आपको जो चाहिए उसे निर्भर करता है। लेकिन व्यक्तिगत रूप से मैं शायद अमूर्त वर्ग के साथ जाऊंगा, साधारण तथ्य के लिए कि यह अधिक लचीलापन प्रदान करता है।

आप, कुछ abstract तरीकों कि प्लगइन का विशेष व्यवहार को परिभाषित करने के लिए आवश्यक हैं प्रदान कर सकता है, जबकि virtual तरीकों optionnaly के लिए एक रास्ता प्रदान करता है एक डिफ़ॉल्ट व्यवहार को ओवरराइड।

अमूर्त वर्ग कुछ उपयोगिता विधियों को भी प्रदान कर सकता है जो प्लगइन के लेखकों के लिए उपयोगी हो सकते हैं।

असल में, एक अमूर्त वर्ग सभी प्रदान कर सकता है कि एक इंटरफ़ेस ऑफ़र और बहुत कुछ। तो यह शायद भविष्य के विस्तार के लिए बेहतर है।

+1

+1 को एक अमूर्त वर्ग कार्यान्वयन के फायदे को परिभाषित करने के लिए पर्याप्त रूप से encapsulates –

4

जो आप लिख रहे हैं वह संदिग्ध रूप से लगता है कि प्रबंधित एक्सटेंसिबिलिटी फ्रेमवर्क का समर्थन करता है: http://mef.codeplex.com/। शायद बस उस का उपयोग करें और पहिया का पुन: आविष्कार से बचें?

+0

जांच कर रहा है ... सूचक के लिए धन्यवाद –

+0

MEF यहां एक अच्छा समाधान होगा । + 1 –

+0

प्लगइन इंजन को लागू करने के लिए कोड की कुछ पंक्तियों का उपयोग किया जा सकता है, http://www.c-sharpcorner.com/UploadFile/rmcochran/plug_in_architecture09092007111353AM/plug_in_architecture.aspx देखें, एक भारी ढांचा हमेशा अनिवार्य नहीं होता है – Aerospace

संबंधित मुद्दे