Quel framework pour MVVM devrais-je utiliser? [fermé]
-
05-07-2019 - |
Question
Je développe une application avec le modèle MVVM, mais j'ai atteint un point où je dois choisir le framework à utiliser.
Parmi les options possibles:
- MVVM Toolkit
- MVVM Foundation
- Cadre d'application WPF (WAF)
- Light MVVM
- Caliburn
- Cinch
- Prism
D'après votre expérience, quel est le meilleur?
La solution
Cela dépend vraiment de ce que vous essayez d’atteindre, du nombre d’infrastructures que vous souhaitez déjà mettre en place et de la facilité avec laquelle vous pouvez trouver des échantillons qui vous aideront. Je vais faire part de mon intérêt ici, car je suis activement impliqué dans au moins un framework MVVM, et j’ai apporté des contributions à d’autres par le biais du groupe Disciples de WPF. Je suis donc un peu partial. En disant cela, voici:
Microsofts MVVM Toolkit - c'est encore beaucoup dans les é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.
Fondation MVVM - version ah de Josh Smith du cadre. 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 qu’il s’agisse également d’un framework compatible Silverlight.
WAF - aucune expérience, donc je ne peux pas en parler, je crains fort.
MVVM Léger - Laurent Bugnion en parle et vient de mettre à jour 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, Silverlight et Blendability sont très largement supportés.
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 pour WPF uniquement 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 conçu pour ê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.
Océan - Karl Shifflett , Responsable de programme de l’équipe Cider, a récemment publié un cadre complet pour MVF MVVM. Encore une fois, c’est un excellent cadre et il y a beaucoup à le recommander.
En résumé, 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 besoins. Si vous pensez que vous souhaitez peut-être prendre en charge Silverlight à partir de la même base de code, vous devez alors ne pas utiliser les frameworks WPF.
Autres conseils
J'ai trouvé cet article très utile http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/ Je l'apporte donc ici pour les utilisateurs à venir
Mise à jour de la section Cinch et ajout du support silverlight à ses fonctionnalités
Je suis désolé pour la longue histoire
Caractéristiques communes:
& # 8226; Classe ViewModelBase (pour la mise en oeuvre de l'interface INotifyPropertyChanged)
& # 8226; RelayCommand comme une classe pour relier la commande d’UI aux gestionnaires de ViewModel
.& # 8226; Les tests unitaires sont livrés avec le framework
Accrochez
& # 8226; Auteur: Sacha Barber
& # 8226; Prise en charge de Silverlight: non (Cinch version 2 prend en charge Silverlight)
& # 8226; Documentation: excellente, 6 articles publiés sur CodeProject
& # 8226; Hébergement: CodePlex
& # 8226; Licence: Licence Code Project Open
& # 8226; Caractéristiques:
comportements attachés
validation à l'aide de IDataErrorInfo
prise en charge d'IEditableObject
création et abonnement d'événements faibles
messagerie du médiateur utilisant des événements faibles
Soutien CIO / ID (avec Unity)
services: enregistreur d'événements, boîte de message, boîte de dialogue Ouvrir une sauvegarde, popup
assistants de filetage
prise en charge des éléments de menu
modèles de vue pouvant être fermés
Générateur de code MVVM
Boîte à outils MVVM Light
& # 8226; Auteur: Laurent Bugnion
& # 8226; Prise en charge de Silverlight: oui
& # 8226; Documentation: nombreux articles disponibles sur le blog de Laurent + d'autres développeurs également
& # 8226; Hébergement: CodePlex
& # 8226; Licence: licence MIT
& # 8226; Caractéristiques:
Programme d'installation MSI
Modèle de projet et d'élément VS
Extraits de code VS
Système Messenger pour la communication entre modèles de vues
Gestion des événements en tant que commandes
Assistants MVVM
& # 8226; Auteur: Mark Smith
& # 8226; Prise en charge de Silverlight: non
& # 8226; Documentation: quelques articles sur le blog de Mark
& # 8226; Hébergement: site personnel
& # 8226; Licence: non définie
& # 8226; Caractéristiques:
comportements attachés
création d'un modèle de vue à l'aide de l'extension de balisage
validation basée sur les attributs
CIO / ID utilisant l'approche ServiceProvider
modèle de vue pouvant être fermé
wait Curseur (en utilisant un nouveau WaitCursor () {// votre code ici})
MVVM Foundation
& # 8226; Auteur: Josh Smith
& # 8226; Prise en charge de Silverlight: non
& # 8226; Documentation: articles sur l'implémentation de Messenger sur le blog de Josh ou Marlon Grech
& # 8226; Hébergement: CodePlex
& # 8226; Licence: MS-PL
& # 8226; Caractéristiques:
Système Messenger pour la communication entre modèles de vues
Moniteur d'événements PropertyChanged
Caliburn
& # 8226; Auteur: Rob Eisenberg
& # 8226; Prise en charge de Silverlight: oui
& # 8226; Documentation: documentation en ligne complète disponible
& # 8226; Hébergement: CodePlex http://www.codeplex.com/caliburn
& # 8226; Licence: licence MIT
& # 8226; Caractéristiques:
Les
commandes sont construites au-dessus d’Actions et partagent par conséquent bon nombre des mêmes fonctionnalités, notamment de multiples paramètres d’entrée, des filtres et une exécution asynchrone automatique
présentateurs qui traitent des problèmes de cycle de vie de l'interface utilisateur, tels que la gestion de l'activation, de la désactivation et de la sémantique 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
& # 8226; Auteur: William e Kempf
& # 8226; Prise en charge de Silverlight: non
& # 8226; Documentation: introduction de base disponible sur CodePlex
& # 8226; Hébergement: CodePlex
& # 8226; Licence: non spécifiée
& # 8226; Caractéristiques:
Modèle ServiceLocator
Création de ViewModel à l'aide d'une extension de balisage personnalisée
Services associés à l'interface utilisateur tels que IDisplayMessage
Calcium
& # 8226; Auteur: Daniel Vaughan
& # 8226; Prise en charge de Silverlight: non
& # 8226; Documentation: 2 articles très détaillés sur CodeProject (part1 et part2)
& # 8226; Hébergement: CodePlex
& # 8226; Licence: utiliser, copier, modifier et / ou distribuer et conserver le droit d'auteur!
& # 8226; Caractéristiques:
Module Manager pour activer ou désactiver les modules à l'exécution
services de messagerie pour interagir avec l'utilisateur depuis le client ou le serveur à l'aide de 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
La journalisation client-serveur est 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 dans tous les modules)
nRoute
& # 8226; Auteur: Rishi
& # 8226; Prise en charge de Silverlight: oui
& # 8226; Documentation: nombreux articles disponibles sur le blog de l'auteur (voir la page d'accueil du projet CodePlex pour les liens)
& # 8226; Hébergement: CodePlex
& # 8226; Licence: MS-PL
& # 8226; Caractéristiques:
prend en charge les modèles de comportements et de déclencheurs Blend3
infrastructure de localisation de ressources
voir les services: OpenFileDialog, ShowMessage & # 8230;
utilise des attributs pour mapper View et ViewModel ensemble
MVM Nito
& # 8226; Auteur: Shammah
& # 8226; Prise en charge de Silverlight: non
& # 8226; Documentation: non
& # 8226; Hébergement: CodePlex
& # 8226; Licence: non spécifiée
& # 8226; Caractéristiques:
- diverses implémentations conviviales MVVM de l'interface ICommand
Océan
& # 8226; Auteur: Karl Shifflet
& # 8226; Prise en charge de Silverlight: non
& # 8226; Documentation: articles disponibles sur le blog de Karl
& # 8226; Hébergement: site personnel
& # 8226; Licence: non spécifiée
& # 8226; Caractéristiques:
écrit en VB.Net
validation par attribut
Classes de base viewmodel: commande de relais, closableviewmodel & # 8230;
Couche d'accès aux données du serveur SQL
Infrastructure MVVM de base
& # 8226; Auteur: Lester Lobo
& # 8226; Prise en charge de Silverlight: non
& # 8226; Documentation: exemple d'application disponible avec la bibliothèque
& # 8226; Hébergement: CodePlex
& # 8226; Licence: MS-PL
& # 8226; Caractéristiques:
délégation des commandes \ reliure
messagerie entre les ordinateurs virtuels
gestion des événements en tant que commandes avec des comportements attachés
gérer les dialogues (et plus) en tant que services
Extraits de code VS
GoodLight
& # 8226; Auteur: Peter O & # 8217; Hanlon & # 8226; Support Silverlight: oui
& # 8226; Documentation: exemple d'application disponible avec la bibliothèque
& # 8226; Hébergement: CodePlex
& # 8226; Licence: MS-PL
& # 8226; Caractéristiques:
& # 8220; espace de travail & # 8221; gestion (ensemble de documents pouvant être fermés)
soutien de la peau
messagerie entre les ordinateurs virtuels
J'essaie de décrire les cadres manquants dans la réponse géniale de Pete:
Prism (Microsoft p & amp; p) est un framework qui fournit plus d'informations. que la prise en charge du modèle MVVM. L'objectif principal de ce projet est de vous aider à créer des applications modulaires WPF et / ou Silverlight. Lorsque vous avez juste besoin d'implémenter le modèle MVVM ou que vous êtes un débutant en .NET / WPF, je n'ai pas recommandé ce projet. Voir aussi: Lien .
Le cadre d'application WPF (WAF) est un cadre léger qui vous aide à créer Applications WPF avec MVVM. C’est réservé à WPF et ne prend donc pas en charge Silverlight. Cela va un peu plus loin que la plupart des autres frameworks MVVM avec l'introduction de Contrôleurs . 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 de machine virtuelle propre 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.
Découvrez également Mix10. J'apprends beaucoup de mon discours: construire votre framework mvvm.
Les cocktails et le framework DevForce de Lancement des idées
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 framework que les 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 élément à prendre en considération 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 pouvez ê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 existe également des nRoute
.Un très bon framework d’application pour WPF / Silverlight qui supporte MVVM