दिलचस्प पोस्ट
प्रोजेक्ट ऑलर के साथ स्पीड की तुलना: सी बनाम पाइथन बनाम एर्लंग बनाम हास्केल उद्देश्य-सी कॉल फ़ंक्शन दूसरे वर्ग पर? सी प्रीप्रोसेसर से एक संदेश को प्रिंट करने का एक पोर्टेबल तरीका है? Arel और Rails में एक तरह की क्वेरी कैसे करें? java.lang.IllegalStateException: कारखाना javax.faces.application.ApplicationFactory के लिए बैकअप नहीं मिल सका एंड्रॉइड SQLite डेटाबेस: धीमा प्रविष्टि कैमरे से पूर्वावलोकन के बिना चित्र लेना सीएसएस डिस्प्ले: इनलाइन बनाम इनलाइन-ब्लॉक विशिष्ट फ़ाइल पर विवादित विलय के लिए मैं हमेशा अपने स्थानीय संस्करण का चयन करने के लिए गिट को कैसे बताऊँ? ईसीएमएस्क्रिप्ट 6 का उपयोग करना फ़ंक्शन पॉइंटर को कैसे स्वरूपित करें? Visual Basic 6.0 और VBA के बीच अंतर यह कैसे पता चलेगा कि क्या उपवर्ग एक रनटाइम पर क्लास का एक उदाहरण है? एक्स कोड कोड भावना रंग / पूर्णता काम नहीं कर रहा है सी # में एक स्ट्रिंग के लिए कीवर्ड "नया" क्या करता है?

एमईएफ और एमएएफ (सिस्टम.एडइन) के बीच चयन करना

प्रबंधित एक्सटेन्सिबिलिटी फ़्रेमवर्क (एमईएफ) और मैनेजमेंट एडेन फ्रेमवर्क (एमएएफ, उर्फ ​​सिस्टम्स.एडइन) बहुत ही समान कार्य पूरा करने लगते हैं। इस स्टैक अतिप्रवाह प्रश्न के अनुसार, क्या MEF प्रणाली के लिए एक प्रतिस्थापन है। एडिन? , आप दोनों एक ही समय में भी उपयोग कर सकते हैं।

आप दूसरे बनाम एक का उपयोग कब करेंगे? आप किस परिस्थिति में दोनों को एक साथ उपयोग करना चुनते हैं?

वेब के समाधान से एकत्रित समाधान "एमईएफ और एमएएफ (सिस्टम.एडइन) के बीच चयन करना"

मैं इन विकल्पों का मूल्यांकन कर रहा हूं और यहां यह निष्कर्ष है कि मैं आया हूं।

एमएएफ एक सच्चे addon ढांचा है I आप अपने addons को पूरी तरह से अलग कर सकते हैं, यहां तक ​​कि उन्हें एक अलग एप डोमेन के अंदर भी चला सकते हैं ताकि अगर कोई एडीशन क्रैश हो, तो यह आपके आवेदन को नहीं ले जाएगा। यह कुछ भी पर निर्भर करता है addons decoupling का एक बहुत ही पूरा तरीका प्रदान करता है, लेकिन अनुबंध आप उन्हें दे। वास्तव में आप अपने अनुबंध एडेप्टर्स को पुराने ऐडंस को पीछे की ओर संगतता प्रदान कर सकते हैं, जबकि आप मुख्य ऐप को अपग्रेड कर रहे हैं। हालांकि यह बहुत अच्छा लगता है, यह ऐपडोमेन को पार करने के लिए आपको भुगतान करने के लिए एक भारी कीमत के साथ आता है। आप इस कीमत को गति में और उन प्रकार की लचीलेपन में भुगतान करते हैं जिन्हें आप आगे और पीछे भेज सकते हैं।

एमईएफ अधिक अतिरिक्त लाभ जैसे कि खोज योग्यता और … के साथ निर्भरता इंजेक्शन की तरह अधिक है (इस पर रिक्त चित्रण करना)। एमईएफ़ में अलगाव की डिग्री एमईएफ में मौजूद नहीं है। वे दो अलग अलग चीजों के लिए दो अलग-अलग ढांचे हैं

डैनियल ने कहा क्या अच्छा है मैं जोड़ूंगा:

यदि आप सिस्टम के बारे में वीडियो देखते हैं। एडिंस, वे स्पष्ट रूप से बहुत बड़ी परियोजनाओं के बारे में बात कर रहे हैं। वह मेजबान एप्लिकेशन को प्रबंधित करने वाली एक टीम , एक एडीआई प्रबंधन का प्रबंधन करने वाली एक और टीम , और अनुबंध और पाइपलाइन को प्रबंधित करने वाली तीसरी टीम के बारे में बात करता है। इसके आधार पर, मुझे लगता है System.Addins स्पष्ट रूप से बड़े अनुप्रयोगों के लिए है मैं एसएपी जैसे ईआरपी सिस्टम जैसे अनुप्रयोगों को सोच रहा हूं (शायद वह बड़ा नहीं है, लेकिन आपको यह विचार मिलता है)। यदि आप उन वीडियो को देख चुके हैं, तो आप यह बता सकते हैं कि सिस्टम का इस्तेमाल करने के लिए काम की मात्रा। एडिंस बहुत बड़ी है यह अच्छी तरह से काम करेगा अगर आपके पास बहुत से कंपनियां हैं जो आपके सिस्टम के लिए तृतीय पक्ष ऐड-इन्स की प्रोग्रामिंग करती हैं और आप उन ऐड-इन अनुबंधों में से किसी को मौत के दंड के तहत नहीं तोड़ सकते।

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

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

एमएएफ आवेदन विकसित और भेज दिया। MAF पर मेरे विचार कुछ हद तक मस्त हैं।

एमएएफ एक "डी-युप्लड" सिस्टम या "ढीली-युग्मित" प्रणाली है जो सबसे खराब है एमईएफ "युग्मित" प्रणाली या "ढीली-युगल" प्रणाली को सर्वश्रेष्ठ में है

एमएएफ का उपयोग करके हमें एहसास हुआ कि एमएएफ लाभ हैं:

  1. अनुप्रयोग स्थापित हो रहा है, जबकि नए स्थापित या मौजूदा घटकों को अद्यतन। ऐडइन अद्यतन किया जा सकता है, जबकि अनुप्रयोग चल रहा था और अद्यतन उपयोगकर्ता को मूल रूप से प्रदर्शित होता है आपको उस के लिए ऐपडेमेंस करना होगा

  2. खरीदे गए घटकों के आधार पर लाइसेंस। हम यह नियंत्रित कर सकते हैं कि कौन सा AddIn उपयोगकर्ता की भूमिका और अनुमतियों द्वारा लोड किया गया था और क्या ऐड-इन का इस्तेमाल के लिए लाइसेंस प्राप्त था।

  3. रैपिड डेवलपमेंट (तेज समय-से-बाजार) ऐडइन विकास पूरी तरह से चंचल पद्धति के साथ फिट बैठता है, विकास दल ने एक समय में एक ऐडइन विकसित किया है, बिना शेष आवेदन के साथ एकीकरण का टुकड़ा भी विकसित किए बिना।

  4. बेहतर QA (एक समय में केवल क्यूए एक घटक)। क्यूए तब एक ही बिट कार्यक्षमता के लिए दोषों का परीक्षण और जारी कर सकता है। परीक्षण के मामलों को विकसित करना और कार्यान्वयन करना आसान था

  5. तैनाती (जोड़ी जाती है जैसे वे विकसित और जारी किए जाते हैं और वे "बस काम करते हैं")। तैनाती केवल एक AddIn बनाने और फ़ाइल को स्थापित करने का मामला है। कोई अन्य विचार आवश्यक नहीं थे!

  6. नए घटकों पुराने घटकों के साथ काम किया। ऐडइन जो काम पर रखा गया था पर जल्दी विकसित किए गए थे। नई AddIns आवेदन में फिट बैठता है seamlessly

मेरे विचार में दो प्रौद्योगिकियां वास्तव में बहुत अलग उपयोग के मामलों को लक्षित करती हैं।

MEF एक शुद्ध निर्भरता इंजेक्शन परिदृश्य में सबसे अच्छा होता है जहां अंतिम एकीकृत समाधान प्रदान करने वाला व्यक्ति या समूह सब कुछ इकट्ठा कर रहा है और संपूर्ण अखंडता के लिए वार्तालाप करता है, लेकिन प्रमुख क्षमताओं के विभिन्न कार्यान्वयन की आवश्यकता है।

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

एक तीसरी समान-समान-प्रतिमान तकनीक पूरी प्रोविडेंटबेस योजना है। यह एक क्षमता को बदलने में भी सक्षम बनाता है लेकिन इसका लक्ष्य वास्तव में परिदृश्य है जहां होस्ट / ऐप को पूरी तरह से एक क्षमता की आवश्यकता होती है और इसकी ज़रूरत वास्तव में config के माध्यम से अलग-अलग कार्यान्वयन निर्दिष्ट करने के लिए है।

मैं बस एमएएफ और एमईएफ दोनों पर चर्चा करते हुए इस लंबा लेख को मिला। http://emcpadden.wordpress.com/2008/12/07/managed-extensibility-framework-and-others/

अन्य उत्तरों द्वारा बनाए गए अंकों के अलावा, ऐसा लगता है कि MEF और MAF के बीच महत्वपूर्ण अंतर यह है कि प्रबंधित एक्सटेंसिबिलिटी फ्रेमवर्क एक कम्पोज़ योग्य भाग को दूसरे पर निर्भर करने की अनुमति देगा। यह प्लग-इन किसी अन्य प्लग-इन पर निर्भर करता है, उदाहरण के लिए।

प्रबंधित एक्सटेन्सिबिलिटी फ़्रेमवर्क भी मेजबान और ऐड-इन के बीच वास्तव में भेद नहीं करता है, जैसा कि सिस्टम। AddIn करता है जहां तक ​​एमईएफ का संबंध है, वे सब सिर्फ कंपोज़ योग्य भागों हैं

मेरी राय में, मतभेदों को खोजने का सबसे अच्छा तरीका कुछ हाथ-कोड पर है मुझे दो एमएसडीएन वॉयथ्रू मिले हैं, दोनों एक कैलकुलेटर उदाहरण के साथ हैं ताकि आप आसानी से अपने कार्यान्वयन की तुलना कर सकें:

एमईएफ: एमईएफ भागों का उपयोग कर सरल कैलकुलेटर उदाहरण
( एम एगेड एक्सटेन्सिबिलिटी एफ रैमवर्क)

  • MEF प्रौद्योगिकी का उपयोग करते हुए एक सरल कैलकुलेटर बनाने का तरीका दिखाता है बाहरी डीएलएस को लोड करने के तरीके को नहीं दिखाता है। (लेकिन आप बस catalog.Catalogs.Add(new DirectoryCatalog("Plugins", "*.dll")); का प्रयोग करके उदाहरण को संशोधित कर सकते हैं catalog.Catalogs.Add(new DirectoryCatalog("Plugins", "*.dll")); का उपयोग करने के बजाय catalog.Catalogs.Add(new DirectoryCatalog("Plugins", "*.dll")); catalog.Catalogs.Add(new AssemblyCatalog(typeof(Program).Assembly)); और कैलकुलेटर कोड और डीएलएल परियोजनाओं को अलग करने के लिए अनुबंध निकालें।)
  • MEF को एक विशिष्ट निर्देशिका संरचना की आवश्यकता नहीं है, यह छोटी और छोटी परियोजनाओं के लिए भी सरल और सरल है। यह विशेषताओं के साथ काम करता है, यह बताता है कि क्या निर्यात किया गया है, जो पढ़ना और समझना आसान है। उदाहरण: [Export(typeof(IOperation))] [ExportMetadata("Symbol", '+')] class Add: IOperation { public int Operate(int left, int right) { return left + right; } } [Export(typeof(IOperation))] [ExportMetadata("Symbol", '+')] class Add: IOperation { public int Operate(int left, int right) { return left + right; } }

  • MEF संस्करण के साथ स्वचालित रूप से निपटने नहीं करता है

एमएएफ: वी 1 और वी 2 संस्करण एमएफ़ प्लगिन के साथ सरल कैलकुलेटर
( एम एगेज्ड डीडीन एफ रैमवर्क)

  • V1 प्लगइन का उपयोग करके कैलकुलेटर कैसे बनाइये और फिर पीछे की संगतता बनाए रखने के दौरान वी 2 प्लगइन के ऊपर कैसे जाना जाए ( ध्यान दें: आप यहां प्लगइन का वी 2 संस्करण पा सकते हैं, मूल लेख में लिंक टूट गया है)
  • एमएएफ एक विशिष्ट निर्देशिका संरचना को लागू करता है , और इसे काम करने के लिए कई बॉयलरप्लेट कोड की आवश्यकता होती है, इसलिए मैं इसे छोटी परियोजनाओं के लिए सुझा नहीं करता उदाहरण:
     Pipeline AddIns CalcV1 CalcV2 AddInSideAdapters AddInViews Contracts HostSideAdapters 

दोनों एमईएफ और एमएफ़ को एनएटी फ्रेमवर्क 4.x में शामिल किया गया है। यदि आप दो उदाहरणों की तुलना करते हैं तो आप देखेंगे कि एमएएफ प्लग-इन में एमईएफ ढांचे के मुकाबले बहुत अधिक जटिलता है – इसलिए उन चौकतों में से किस का उपयोग करने के लिए आपको ध्यान से सोचने की ज़रूरत है

एमएएफ और एमईएफ दोनों ऐप डॉक्स का उपयोग कर सकते हैं और दोनों रनटाइम में डीएलएल लोड / अनलोड कर सकते हैं। हालांकि मुझे जो अंतर मिल गया है वह हैं: एमएएफ एडीआईन्स डिकॉप्ल्ड हैं, एमईएफ घटकों को ढीला युग्मित कर रहे हैं; एमएएफ "सक्रिय" (नया उदाहरण) जबकि एमईएफ डिफ़ॉल्ट रूप से उदाहरण बनाता है।

एमईएफ के साथ आप किसी भी अनुबंध के लिए जेनेरिक हॉस्ट जेनरिक्स का उपयोग कर सकते हैं। इसका अर्थ MEF लोड / अनलोड और घटक प्रबंधन एक सामान्य पुस्तकालय में हो सकता है और सामान्य रूप से उपयोग किया जा सकता है।