L'implementazione MVVM ortodossa è inutile? Sto creando una nuova applicazione e ho considerato Windows Form e WPF. Ho scelto WPF perché è a prova di futuro e offre molta flessibilità. C'è meno codice ed è più facile apportare modifiche significative alla tua interfaccia utente usando XAML.
Poiché la scelta per WPF è ovvia, ho pensato che potevo anche andare fino in fondo utilizzando MVVM come architettura dell'applicazione poiché offre miscelabilità, problemi di separazione e testabilità dell'unità. In teoria, sembra bello come il Santo Graal della programmazione dell'interfaccia utente. Questa breve avventura; tuttavia, si è trasformato in un vero e proprio mal di testa. Come previsto in pratica, sto scoprendo di aver scambiato un problema con un altro. Tendo ad essere un programmatore ossessivo in quanto voglio fare le cose nel modo giusto in modo da poter ottenere i giusti risultati e possibilmente diventare un programmatore migliore. Il modello MVVM ha appena bocciato il mio test sulla produttività e si è appena trasformato in un grosso trucco schifoso!
Il chiaro esempio calzante è l'aggiunta del supporto per una finestra di dialogo modale. Il modo corretto è creare una finestra di dialogo e collegarla a un modello di visualizzazione. Far funzionare tutto questo è difficile. Per trarre vantaggio dal pattern MVVM, è necessario distribuire il codice in più punti attraverso i livelli dell'applicazione. Devi anche usare costrutti di programmazione esoterici come modelli ed espressioni lamba. Cose che ti fanno guardare lo schermo grattandoti la testa. Ciò rende la manutenzione e il debug un incubo in attesa di accadere come ho scoperto di recente. Avevo una casella di informazioni che funzionava bene finché non ho ricevuto un'eccezione la seconda volta che l'ho invocata, dicendo che non poteva mostrare di nuovo la finestra di dialogo una volta chiusa. Ho dovuto aggiungere un gestore di eventi per la funzionalità di chiusura alla finestra di dialogo, un altro nell'implementazione di IDialogView e infine un altro in IDialogViewModel. Pensavo che MVVM ci avrebbe salvato da tali stravaganti hacker!
Ci sono molte persone là fuori con soluzioni concorrenti a questo problema e sono tutti hack e non forniscono una soluzione pulita, facilmente riutilizzabile ed elegante. La maggior parte dei toolkit MVVM sorvola sulle finestre di dialogo e quando le affrontano, sono solo caselle di avviso che non richiedono interfacce personalizzate o modelli di visualizzazione.
Ho intenzione di rinunciare al modello di visualizzazione MVVM, almeno alla sua implementazione ortodossa. Cosa ne pensi? È valsa la pena per te se ne avessi avuto? Sono solo un programmatore incompetente o MVVM non è quello che si propone di essere?