J'ai déjà lancé un projet MVVM / WPF, qui a finalement été construit et déployé, et pour cela j'ai étudié beaucoup de Caliburn.Micro MVVM Framework. Le fait est que j'ai fini par ne pas utiliser Caliburn.Micro pour cela et j'ai fini par implémenter moi-même certains concepts MVVM (en particulier les classes ViewModelBase
et RoutedCommand
).
Maintenant, j'ai été affecté à un projet un peu plus grand dans le même sens: une «application de bureau hors ligne client riche utilisateur unique», pour ainsi dire, et j'ai décidé d'utiliser Caliburn.Micro. Et c'est là que commence mon "problème".
J'ai lu dans ce célèbre article de blog , dont le titre dit: "Si vous utilisez MVVM, vous avez besoin d' un framework", que:
«Essayer de faire quelque chose comme MVVM sans framework représente un travail énorme. Des tonnes de code en double, réinventant la roue et recyclant les gens pour penser différemment .
Au moins avec un framework, vous évitez le code en double et, espérons-le, n'avez pas à réinventer la roue - ce qui vous permet de vous concentrer sur le recyclage des personnes. La partie de recyclage est généralement inévitable, mais un cadre fournit un code et une structure de plomberie, ce qui facilite le processus. "
Je serais d'accord sur la première lecture, mais mon expérience réelle avec Caliburn.Micro (CM) dans mon application réelle est d'être désemparée et désorientée. Autrement dit, le cadre n'a pas du tout facilité le processus, bien au contraire. Lire les exemples toujours répétés fournis par Rob Eisenberg dans la documentation plutôt (trop) informelle et essayer d'inférer les modèles d'utilisation à partir des échantillons fournis compliqués, et leurs relations de classe et d'interface tout à fait indirectes, où les choses semblent être conçues pour fonctionner sur la base de effets secondaires, semble humainement impossible, sauf si vous êtes un génie aguerri (désolé pour la diatribe, mais je suppose que vous savez ce que je veux dire).
Sans oublier que tout scénario ci-dessus semble impliquer des conteneurs IoC, ce que je n'ai jamais travaillé et qui semble résoudre un problème que je pourrais même pas avoir . Je n'ai pas envie de passer plus d'heures de projet à apprendre ces choses au lieu de penser à mon problème et aux domaines d'application. Je voulais juste une banane, mais CM m'a donné un gorille (IoC) tenant un panier de bananes.
Maintenant que j'envisage de revenir à mon framework MVVM homepun - composé uniquement de la poignée de classes spécifiques à MVVM que je veux réellement implémenter - je voudrais au moins donner une chance à CM, au cas où je perdrais quelque chose ici, ou simplement faire les choses "dans le mauvais sens" par pure inexpérience et ignorance. Et donc la question est:
Il existe un large consensus sur le fait que "les cadres rendent les choses plus faciles et plus naturelles", mais s'il m'arrive de faire l'expérience du contraire, cela signifie-t-il que je ne devrais pas utiliser le cadre ou que j'essaie de l'apprendre de la mauvaise façon? Y a-t-il un indice que je ne devrais même pas utiliser un cadre en premier lieu? Ou existe-t-il une "bonne" façon de comprendre comment utiliser CM pour un développement MVVM simple?
RelayCommand
implémentation (car elle "se lie" directement aux méthodes par convention, au lieu de se lier aux propriétés ICommand).
RelayCommand
d' une autre bibliothèque si celle utilisée par Caliburn Micro ne fonctionne pas pour vous.
EventAggregator
pour la messagerie, etNotificationObject
pour un ViewModelBase, et MVVM LightRelayCommand
pour les commandes. L'important est d'identifier les problèmes que le framework va résoudre pour vous et d'utiliser uniquement ces solutions. Ne vous sentez pas obligé d'utiliser toute la bibliothèque du framework.