Je développe une application avec le modèle MVVM, mais j'ai atteint un point où je dois choisir quel framework utiliser.
Parmi les options possibles sont:
D'après votre expérience, lequel est le meilleur?
Cela dépend vraiment de ce que vous essayez d’atteindre, du nombre d’infrastructures que vous souhaitez mettre en place et de la facilité avec laquelle vous pouvez trouver des exemples qui vous aideront. Je vais faire part de mon intérêt ici, car j’ai activement participé à au moins un framework MVVM, et j’ai eu une contribution dans d’autres par le biais du groupe Disciples de WPF, je suis donc un peu partial. En disant cela, voici:
Microsofts MVVM Toolkit - Cela en est encore beaucoup aux étapes alpha. Lors de sa sortie initiale, les Disciples ont été un peu féroces à cause de ce qu’ils n’ont pas fait. Cela dit, MS cherche à renforcer ce cadre, il est donc à surveiller - il n’est pas encore prêt.
MVVM Foundation - ah la version du framework de Josh Smith. Josh est l’un des pères du MVVM et a été un ardent défenseur et un enseignant du modèle. En conséquence, les empreintes digitales de Josh sont en grande partie présentes dans d'autres frameworks. Ce cadre est destiné à fournir les bases du MVVM et non à résoudre certains des problèmes les plus ésotériques. À l’origine, cela n’était destiné qu’à WPF, mais des personnes telles que Laurent Bugnion et moi-même avons ajouté des fonctionnalités/projets qui impliquent que ce soit également un cadre compatible Silverlight.
WAF - aucune expérience, donc je ne peux pas en parler, j'ai bien peur.
MVVM Light - Laurent Bugnion le reprend et vient de passer à la version 2. Il s'agit d'un très bon framework, mais là encore, il n'est pas destiné à couvrir tous les aspects des applications MVVM. Étant donné les antécédents de Laurent, il est très fortement supporté par Silverlight et Blendability.
Mise à jour Laurent vient de m'informer que les versions .NET 3.5 et .NET 4.0 sont compatibles avec les fonctionnalités. Wau pour aller Laurent.
Cinch - l'excellent framework MVVM WPF de Sacha Barber. Cela couvre plus de terrain que les cadres dont j'ai parlé ci-dessus. C'est un excellent cadre qui tire parti des concepts abordés dans l'excellent projet Onyx de Bill Kempf. Onyx est destiné à compléter les frameworks MVVM et ajoute des fonctionnalités qui étaient généralement difficiles à réaliser pour les utilisateurs de MVVM/WPF. Encore une fois, initialement destiné à être uniquement WPF, Onyx a progressivement intégré la compatibilité SL - travail dans lequel je suis particulièrement fier d’avoir été impliqué.
Prism - Encore une fois, je ne l'ai jamais utilisé, mais j'ai entendu beaucoup de bonnes choses à ce sujet.
Ocean - Karl Shifflett, responsable de programme de l’équipe Cider, a récemment publié un cadre complet pour MVVM MVVM. Encore une fois, c'est un excellent cadre et il y a beaucoup de choses à le recommander.
En bout de ligne, téléchargez les différents cadres, examinez-les et déterminez celui qui correspond le plus intuitivement à votre façon de penser et à vos exigences. Si vous pensez que vous souhaiterez peut-être prendre en charge Silverlight à partir de la même base de code, les frameworks WPF uniquement doivent être actualisés.
J'ai trouvé cet article très utile http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/ afin que j'apporte ici pour les utilisateurs à venir
Je mets à jour la section Cinch et ajoute le support silverlight à ses fonctionnalités
Je suis désolé pour la longue histoire
Caractéristiques communes:
• classe ViewModelBase (pour l'implémentation de l'interface INotifyPropertyChanged)
• RelayCommand comme classe pour lier la commande d’UI aux gestionnaires de ViewModel
• Les tests unitaires sont fournis avec le cadre
Cinch
• Auteur: Sacha Barber
• Prise en charge de Silverlight: non (Cinch version 2 prend en charge Silverlight)
• Documentation: excellente, 6 articles publiés sur CodeProject
• Hébergement: CodePlex
• Licence: Licence Code Project Open
• Caractéristiques:
comportements attachés
validation à l'aide de IDataErrorInfo
support pour IEditableObject
création et abonnement d'événements faibles
messagerie du médiateur utilisant des événements faibles
Soutien CIO/DI (avec Unity)
services: enregistreur d'événements, boîte de message, dialogue de sauvegarde ouvert, popup
aides de filetage
support pour les éléments de menu
modèles de vue fermables
Générateur de code MVVM
MVVM Light Toolkit
• Auteur: Laurent Bugnion
• support Silverlight: oui
• Documentation: de nombreux articles disponibles sur le blog de Laurent + d’autres développeurs également
• Hébergement: CodePlex
• Licence: MIT licence
• Caractéristiques:
Installateur MSI
Modèle de projet et d'élément VS
Extraits de code VS
Système Messenger pour la communication entre modèles
Gestion des événements en tant que commandes
MVVM Helpers
• Auteur: Mark Smith
• support Silverlight: non
• Documentation: quelques articles sur le blog de Mark
• Hébergement: site personnel
• Licence: non définie
• Caractéristiques:
comportements attachés
création d'un modèle de vue à l'aide d'une extension de balisage
validation basée sur les attributs
CIO/DI utilisant l'approche ServiceProvider
modèle de vue fermable
attendez le curseur (en utilisant new WaitCursor () {// votre code ici})
MVVM Foundation
• Auteur: Josh Smith
• support Silverlight: non
• Documentation: articles sur l’implémentation de Messenger sur Josh ou le blog de Marlon Grech
• Hébergement: CodePlex
• Licence: MS-PL
• Caractéristiques:
Système Messenger pour la communication entre modèles
Moniteur d'événements PropertyChanged
Caliburn
• Auteur: Rob Eisenberg
• support Silverlight: oui
• Documentation: documentation en ligne complète disponible
• Hébergement: CodePlex http://www.codeplex.com/caliburn
• Licence: MIT licence
• Caractéristiques:
les commandes sont construites au-dessus des actions et partagent par conséquent bon nombre des mêmes fonctionnalités, y compris plusieurs paramètres d'entrée, filtres et exécution automatique asynchrone
des présentateurs qui traitent des problèmes de cycle de vie de l'interface utilisateur, tels que la gestion de la sémantique d'activation, de désactivation et d'arrêt de divers composants de l'interface utilisateur
Les applications Caliburn sont entièrement testables
divers utilitaires tels qu'un gestionnaire de tâches en arrière-plan
prend en charge divers modèles d'interface utilisateur (pas uniquement MVVM)
conteneur d'injection de dépendance
Onyx
• Auteur: William e Kempf
• support Silverlight: non
• Documentation: introduction de base disponible sur CodePlex
• Hébergement: CodePlex
• Licence: non spécifiée
• Caractéristiques:
Motif ServiceLocator
Création de ViewModel à l'aide d'une extension de balisage personnalisée
Services liés à l'interface utilisateur tels que IDisplayMessage
Calcium
• Auteur: Daniel Vaughan
• support Silverlight: non
• Documentation: 2 articles très détaillés sur CodeProject (part1 et part2)
• Hébergement: CodePlex
• Licence: utiliser, copier, modifier et/ou distribuer et conserver le droit d'auteur!
• Caractéristiques:
Gestionnaire de modules pour l'activation ou la désactivation de modules lors de l'exécution
services de messagerie pour interagir avec l'utilisateur depuis le client ou le serveur en utilisant la même API
Service de commande pour associer les ICommandes WPF à des interfaces de contenu qui ne deviennent actives que lorsqu'une vue ou un modèle actif implémente l'interface
Adaptateurs de région pour les barres d'outils et les menus
Journalisation client-serveur prête à fonctionner immédiatement
Inclut des modules, tels qu'un navigateur Web, un éditeur de texte, une fenêtre de sortie, etc.
Interface à onglets avec indication de fichier modifié (réutilisable sur plusieurs modules)
nRoute
• Auteur: Rishi
• support Silverlight: oui
• Documentation: nombreux articles disponibles sur le blog de l’auteur (voir la page d’accueil du projet CodePlex pour les liens)
• Hébergement: CodePlex
• Licence: MS-PL
• Caractéristiques:
soutenir les modèles de comportements et de déclencheurs de Blend3
cadre de localisation de ressources
voir les services: OpenFileDialog, ShowMessage…
utilise des attributs pour mapper View et ViewModel ensemble
Nito MVVM
• Auteur: Shammah
• support Silverlight: non
• Documentation: non
• Hébergement: CodePlex
• Licence: non spécifiée
• Caractéristiques:
- diverses implémentations conviviales MVVM de l'interface ICommand
Océan
• Auteur: Karl Shifflet
• support Silverlight: non
• Documentation: articles disponibles sur le blog de Karl
• Hébergement: site personnel
• Licence: non spécifiée
• Caractéristiques:
écrit en VB.Net
validation par attribut
classes de base de viewmodel: relaycommand, closeableviewmodel…
Couche d'accès aux données du serveur SQL
Framework MVVM de base
• Auteur: Lester Lobo
• support Silverlight: non
• Documentation: exemple d'application disponible avec la bibliothèque
• Hébergement: CodePlex
• Licence: MS-PL
• Caractéristiques:
délégation de commandes\Keybinding
messagerie entre les machines virtuelles
traitement des événements en tant que commandes avec comportements attachés
gérer les dialogues (et plus) en tant que services
Extraits de code VS
GoodLight
• Auteur: Peter O’Hanlon • Support Silverlight: oui
• Documentation: exemple d'application disponible avec la bibliothèque
• Hébergement: CodePlex
• Licence: MS-PL
• Caractéristiques:
Gestion des "espaces de travail" (ensemble de documents pouvant être fermés)
soutien de la peau
messagerie entre les machines virtuelles
J'essaie de décrire les cadres manquants dans la réponse géniale de Pete:
MVVM Toolkit (Microsoft) est une bibliothèque très légère avec des modèles de projet Visual Studio qui devraient prendre en charge les débutants avec ce modèle. Si Microsoft obtient de bons retours pour son Toolkit, il est possible qu’ils l’implémentent en tant que nouveau modèle de projet Visual Studio (peut-être 2010).
Prism (Microsoft p & p) est un framework qui fournit davantage que la prise en charge du modèle MVVM. L'objectif principal de ce projet est de vous aider à construire des applications modulaires WPF et/ou Silverlight. Lorsque vous devez simplement implémenter le modèle MVVM ou que vous êtes un débutant en .NET/WPF, je ne recommanderai pas ce projet. Voir aussi: Lien .
WPF Application Framework (WAF) est un framework léger qui vous aide à créer des applications WPF avec MVVM. C’est juste pour WPF et ne supporte donc pas Silverlight. Cela va un peu plus loin que la plupart des autres frameworks MVVM avec l'introduction de Controllers . Ils sont responsables du flux de travail de l'application et assurent la médiation entre différents ViewModels.
Meh Mvvm n'a pas vraiment besoin d'un framework complet pour supporter IMO. Si vous comprenez le concept, il est assez simple de commencer avec une classe de base propre VM qui implémente INotify), puis de partir de là.
Mélangez le vôtre!
J'ai utilisé EventAggregator de PRISM, avec ViewModelBase de MVVM Foundation, etc. J'ai également modifié le RelayCommand (DelegateCommand appelé à certains endroits) pour accepter d'autres données, et ainsi de suite.
Je ne recommanderais pas un seul cadre en soi.
mon pari sera sur Caliburn et MVVMlight, il semble que peu de ces frameworks MVVM prennent en charge Silverlight. Je peux prévoir qu'il y aura plus de frameworks MVVM à choisir que les frameworks IoC, car il est plus difficile de configurer la limite de fonctionnalité au framework mvvm. Je suppose que le meilleur moyen de déterminer lequel convient le mieux à votre projet consiste à répertorier/comparer leurs fonctionnalités.
Consultez également Mix10. J'apprends beaucoup de la conversation: la construction de votre framework mvvm.
Egalement Cocktail et framework DevForce de Ideablade
J'utilise Prism et j'aime ça. Une des choses les plus importantes pour moi était qu'il y aurait d'autres personnes qui pourraient m'aider si nécessaire et de bons exemples. Une fois que vous maîtrisez les bases, vous avez besoin de nombreuses extensions pour votre application. C’est bien plus facile lorsque vous utilisez le même cadre que d’autres.
Dans l’ensemble, je suis à 90% dans mon application et tout ce que j’ai utilisé de MVVM Toolkit est la fonction d’usine qui crée une commande pour moi à partir d’une fonction de délégué à lancer dans Execute. Je pense que je pourrais passer à n'importe quel autre cadre ou à aucun autre dans quelques heures.
Un autre à considérer est MEFedMVVM . Je l'ai utilisé sur quelques projets. Léger, non intrusif, il prend en charge Silverlight et WPF. Il est également capable de prendre en charge les données de conception dans Blend, pour ceux qui utilisent ce produit.
Si vous recherchez une extensibilité (possibilité d'écrire des compléments) en plus d'un framework d'application WPF/MVVM, alors vous serez peut-être intéressé par SoapBox Core disclaimer: je l'ai écrit . Il est open source, donc même si vous ne l'utilisez pas, il pourrait contenir de bonnes idées. Il utilise MEF pour l'extensibilité et l'IoC.
Il y a aussi nRoute
Un framework d'application vraiment sympa pour WPF/Silverlight qui supporte MVVM