La mise en œuvre orthodoxe de MVVM est-elle inutile? Je crée une nouvelle application et j'ai envisagé Windows Forms et WPF. J'ai choisi WPF car il est à l'épreuve du temps et offre beaucoup de flexibilité. Il y a moins de code et il est plus facile d'apporter des modifications importantes à votre interface utilisateur à l'aide de XAML.
Étant donné que le choix de WPF est évident, j'ai pensé que je pourrais aussi bien aller jusqu'au bout en utilisant MVVM comme architecture d'application car il offre une capacité de fusion, des problèmes de séparation et une testabilité unitaire. Théoriquement, cela semble beau comme le Saint Graal de la programmation d'interface utilisateur. Cette brève aventure; cependant, est devenu un véritable casse-tête. Comme prévu dans la pratique, je constate que j'ai échangé un problème contre un autre. J'ai tendance à être un programmeur obsessionnel dans la mesure où je veux faire les choses de la bonne manière afin d'obtenir les bons résultats et éventuellement devenir un meilleur programmeur. Le modèle MVVM vient de faire échouer mon test de productivité et vient de se transformer en un gros hack dégueulasse!
Le cas clair est l'ajout de la prise en charge d'une boîte de dialogue modale. La méthode correcte consiste à créer une boîte de dialogue et à la lier à un modèle de vue. Faire fonctionner cela est difficile. Pour bénéficier du modèle MVVM, vous devez distribuer le code à plusieurs endroits dans les couches de votre application. Vous devez également utiliser des constructions de programmation ésotériques telles que des modèles et des expressions lamba. Des trucs qui vous font regarder l'écran en vous grattant la tête. Cela fait de la maintenance et du débogage un cauchemar qui attend de se produire, comme je l'ai récemment découvert. J'avais une boîte à propos qui fonctionnait bien jusqu'à ce que j'obtienne une exception la deuxième fois que je l'ai invoquée, en disant qu'elle ne pouvait plus afficher la boîte de dialogue une fois qu'elle était fermée. J'ai dû ajouter un gestionnaire d'événements pour la fonctionnalité de fermeture à la fenêtre de dialogue, un autre dans l'implémentation IDialogView de celui-ci et enfin un autre dans IDialogViewModel. Je pensais que MVVM nous sauverait d'un piratage aussi extravagant!
Il existe plusieurs personnes avec des solutions concurrentes à ce problème et ce sont tous des hacks et ne fournissent pas une solution propre, facilement réutilisable et élégante. La plupart des boîtes à outils MVVM passent sous silence les boîtes de dialogue et lorsqu'elles y répondent, ce ne sont que des boîtes d'alerte qui ne nécessitent pas d'interfaces personnalisées ou de modèles d'affichage.
Je prévois d'abandonner le modèle de vue MVVM, du moins son implémentation orthodoxe. Qu'est-ce que tu penses? Cela a-t-il valu la peine pour vous si vous en aviez? Suis-je juste un programmeur incompétent ou MVVM n'est-il pas ce qu'il veut être?