30 votes

Prism v4 : Unity ou MEF ?

J'ai téléchargé Prisme v4 et j'ai lancé le programme d'installation. Je suis allé dans le répertoire et j'ai exécuté les deux fichiers batch suivants :

  • Ordinateur de bureau uniquement - Open Modularity With Mef QuickStart.bat
  • Ordinateur de bureau uniquement - Open Modularity With Unity QuickStart.bat

Lorsque je compile ces applications, je ne vois pas de réelle différence. J'ai cherché MEF vs Unity et j'ai trouvé quelques pour/contre, mais rien qui indique spécifiquement si l'un est "meilleur" (et je sais que c'est subjectif) avec une utilisation dans Prism. Je suppose que si j'énumère mes besoins, quelqu'un pourra m'indiquer les technologies correctes à utiliser (même si ce n'est pas Prism 4).

  • L'application doit être écrite en WPF ( PAS Silverlight).
  • L'application principale sera extrêmement fine.
  • L'application principale utilisera un service Web pour construire le menu des "apps/modules" auxquels une personne a accès.
  • Les "apps/modules" seront entièrement contenus dans d'autres bibliothèques gérées.
  • L'application principale obtient des vues et des modèles de vues en réfléchissant dans ces DLL.
  • L'application principale doit alimenter ces "apps/modules" en services de journalisation, etc.

Par exemple :

Un utilisateur de base pourrait avoir les options suivantes :

  • Enregistrement d'adresse en mode consultation seulement

Tous les éléments relatifs à l'adresse se trouvent dans Address.dll.

Un utilisateur avancé pourrait avoir les options suivantes :

  • Nouvel enregistrement d'adresse
  • Ouvrir l'enregistrement de l'adresse (mise à jour/suppression)
  • Gérer les utilisateurs

Tous les éléments relatifs à l'adresse se trouvent dans Address.dll.
Tous les éléments liés à la gestion se trouvent dans Admin.dll.

L'application ne devrait pas réellement faire référence à l'une ou l'autre de ces DLL, je prévois d'y réfléchir de sorte que s'il y a 100 modules différents et qu'un utilisateur n'a accès qu'à 2 d'entre eux, seuls 2 d'entre eux sont téléchargés et utilisés. Alors qu'un utilisateur qui a accès à 10 d'entre eux obtient ces 10 modules.

J'ai déjà résolu le problème du téléchargement de la DLL via le WebService :)

21voto

onof Points 9477

Aucune n'est "meilleure" : ce sont des choses différentes.

IMO, votre choix devrait être guidé uniquement par vos exigences. Sur la base des exigences que vous avez postées ici, je vous suggérerais d'utiliser MEF, car vous avez des modules contenus dans des DLLs et l'application principale ne sait pas quels modules charger. Ces tâches sont la raison pour laquelle MEF existe.

De toute façon, vous pourriez utiliser les deux : MEF pour la modularité et Unity pour tirer parti de l'injection de dépendances (testabilité, réutilisabilité, ...).

4voto

Ian Ringrose Points 19115

Si tous les modules ne sont pas recompilés en même temps que l'application, le MEF vous offre de nombreux moyens de faire face aux changements d'interfaces dans l'application principale. Sinon, MEF mai être plus complexe que nécessaire.

2voto

Michael Ulmann Points 745

J'utilise Unity depuis plus d'un an avec PRISM mais j'ai remarqué de sérieux problèmes de fuite de mémoire. J'ai donc décidé d'essayer PRISM 4 et MEF. Ce que j'ai fait, c'est d'abord convertir mon application pour utiliser PRISM 4 avec Unity. Puis j'ai converti une branche pour utiliser MEF. Cela peut paraître étrange mais MEF semble mieux gérer la consommation de mémoire et la libération que Unity.

Il serait agréable de savoir si d'autres personnes ont fait la même expérience ?

2voto

Khoa Points 28

Myermique

En ce qui concerne votre question, à savoir si MEF et UNITY peuvent fonctionner harmonieusement l'un avec l'autre, je peux vous dire qu'ils fonctionnent très bien l'un avec l'autre. J'ai développé une application de preuve de concept qui utilise PRISM, Unity et MEF.

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