167 votes

Choisir entre MEF et MAF (System.AddIn)

Le Managed Extensibility Framework (MEF) et Managed AddIn Framework (CRG, aka System.AddIn) semblent accomplir des tâches très similaires. Selon cette question Stack Overflow, MEF n’est un remplacement pour System.Addin ?, vous pouvez même utiliser les deux en même temps.

Quand vous choisiriez d’utiliser l’un contre l’autre ? Dans quelles circonstances vous choisiriez d’utiliser les deux ensemble ?

135voto

Danielg Points 1789

J'ai été à l'évaluation de ces options et voici la conclusion que je suis venu.

Le CRG est un vrai addon cadre. Vous pouvez séparer vos addons complètement, même en cours d'exécution dans une application distincte de domaine de sorte que si un addon se bloque, il ne prendra pas en bas de votre application. Il fournit également un moyen de dissocier les addons de la fonction sur n'importe quoi mais le contrat que vous leur donnez. En fait, vous pouvez versionize votre contrat adaptateurs pour fournir en arrière la compatibilité de vieux addons pendant la mise à niveau de l'Application principale. Tout cela sonne bien, il est livré avec un lourd prix à payer pour la croix domaines d'application. Vous payez ce prix dans la vitesse et aussi de la flexibilité des types que vous pouvez envoyer en arrière et en avant.

MEF est plus de l'injection de dépendance avec quelques avantages supplémentaires tels que la détectabilité et ... (dessin d'un vide sur celui-ci). Le degré d'isolement que le CRG a n'est pas présent dans la MEF. Ils sont deux cadres différents pour deux choses différentes.

La caisse http://kentb.blogspot.com/2009/02/maf-and-mef.html pour plus de détails.

66voto

Scott Whitlock Points 8172

Ce Danielg dit est bien. Je voudrais ajouter:

Si vous regardez les vidéos sur le Système.Addins, ils sont clairement parler de projets de très grande envergure. Il parle d'une équipe de gestion de l'application hôte, une autre équipe de la gestion de chaque add-in, et un troisième de l'équipe de gestion du contrat et le pipeline. Sur cette base, je pense que le Système.Addins est clairement pour des applications plus importantes. Je pense à des applications telles que les systèmes ERP tels que SAP (peut-être pas très grandes, mais vous voyez l'idée). Si vous avez regardé ces vidéos, vous pouvez dire que la quantité de travail à utiliser le Système.Addins est très grand. Il fonctionnerait bien si vous aviez beaucoup d'entreprises de programmation de la 3e partie add-ins pour votre système et vous ne pouvez pas casser l'un de ces modules dans les contrats sous peine de mort.

D'autre part, le MEF semble partager plus de similitudes pour SharpDevelop complémentaires dans le schéma, le plugin Eclipse en architecture ou en Mono.Addins. Il est beaucoup plus facile à comprendre que le Système.Addins et je crois que c'est beaucoup plus flexible. Les choses que vous perdez sont que vous n'obtenez pas le domaine d'application de l'isolement ou de fort gestion des versions des contrats out-of-the-box avec le MEF. Du MEF sont les points forts que vous pouvez structurer l'ensemble de votre application sous forme d'une composition de parties, de sorte que vous pouvez expédier votre produit dans différentes configurations pour différents clients, et si le client achète une nouvelle fonctionnalité, il suffit de les déposer la partie pour cette fonctionnalité dans leur répertoire d'installation et voit l'application et de l'exécution. Il facilite également les tests. Vous pouvez instancier l'objet que vous souhaitez tester et nourrir les objets fantaisie pour toutes ses dépendances, mais lorsqu'il s'exécute comme un composé d'application, le processus de composition automatiquement crochets réelle, l'ensemble des objets ensemble.

Le point le plus important que je voudrais mentionner est que, même si le Système.Addins est dans le cadre déjà, je ne vois pas beaucoup de preuves de personnes qui l'utilisent, mais MEF est juste assis là sur CodePlex soi-disant pour être inclus dans .NET 4, et les gens sont déjà en train de construire un grand nombre d'applications avec elle (moi y compris). Je pense que vous dit quelque chose à propos de ces deux cadres.

61voto

user151112 Points 451

Après avoir développé et livré un CRG de l'application. Mon point de vue sur le CRG sont un peu blasés.

Le CRG est un "découplés " system" ou "faiblement couplées" système au pire. MEF est "couplé" système ou "lâche-couple" du système, au mieux.

CRG avantages que nous avons réalisé à l'aide du CRG sont:

  1. Installation nouvelle ou mise à jour des composants existants, tandis que l'application est en cours d'exécution. Le Complément peut être mis à jour alors que la Demande était en cours d'exécution et les mises à jour apparaissent à l'utilisateur de manière transparente. Vous devez avoir des domaines d'application pour cela.

  2. Concession de licences sur des composants achetés. Nous avons pu contrôler les AddIn ont été chargés par le rôle de l'utilisateur et les autorisations et si le Complément a été autorisé.

  3. Développement rapide (plus rapide temps-à-marché). Le Complément de développement s'intègre parfaitement avec l'agilité methodolgy, l'équipe de développement a développé un Complément à un moment sans avoir à acquérir l'intégration pièce avec le reste de l'application.

  4. L'amélioration de l'AQ (seulement QA un composant à la fois). QA pu tester et d'émettre des défauts pour un seul bit de la fonctionnalité. Le cas de test ont été plus faciles à élaborer et à mettre en œuvre.

  5. De déploiement (ajouter des composants tels qu'ils sont mis au point et publiés et ils ont "juste"). Le déploiement est seulement une question de faire un AddIn et installer le fichier. Pas d'autres considérations ont été nécessaires!

  6. De nouveaux composants travaillé avec les anciens composants. AddIn qui ont été développés dès le début continué à travailler. De nouveaux Compléments ajustement dans l'Application de façon transparente

28voto

Raoul Points 500

À mon avis, les deux technologies de cibler très différents cas d'utilisation.

MEF est généralement mieux dans un pur injection de dépendance scénario où une personne ou un groupe de prestation de la finale de la solution intégrée est l'assemblage de tout et de se porter garante de l'intégrité globale, mais a besoin d'avoir des implémentations différentes de capacités clés.

Le CRG est un scénario où une personne/groupe développe une plate-forme ou de l'hôte et d'autres groupes d'ajouter des fonctionnalités après le fait et qui n'est pas sous le contrôle de la structure d'accueil. Dans ce scénario, le besoin est de plus d'élaborer des mécanismes pour "protéger" l'armée de voyous add-ins (ou pour protéger les compléments les uns des autres).

Un troisième similaire-en-motif de la technologie est l'ensemble de la ProviderBase régime. Cela permet également d'effectuer le remplacement d'une capacité, mais son objectif est vraiment le scénario où l'hôte/l'application a absolument besoin d'une fonctionnalité et le besoin est vraiment de spécifier les différentes implémentations via config.

18voto

dthrasher Points 10641

Je viens de découvrir ce long article, de discuter à la fois le CRG et le MEF. http://emcpadden.wordpress.com/2008/12/07/managed-extensibility-framework-and-others/

En plus des points réalisés par les autres réponses, il semble que l'une des principales différences entre le MEF et le CRG est que le Managed Extensibility Framework permettent composable partie de dépendre d'un autre. Elle permettrait à un plug-in de dépendre d'un autre plug-in, par exemple.

Le Managed Extensibility Framework aussi ne fait pas de distinctions entre l'hôte et le complément, comme le Système.AddIn. Aussi loin que MEF est concerné, ils sont tout simplement composable pièces.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X