A implementação do MVVM ortodoxa é inútil? Estou criando um novo aplicativo e considerei Windows Forms e WPF. Escolhi o WPF porque é à prova de futuro e oferece muita flexibilidade. Há menos código e é mais fácil fazer alterações significativas em sua interface do usuário usando XAML.
Uma vez que a escolha do WPF é óbvia, percebi que também posso ir até o fim usando MVVM como minha arquitetura de aplicativo, uma vez que oferece capacidade de mistura, questões de separação e testabilidade de unidade. Teoricamente, parece bonito como o Santo Graal da programação da IU. Esta breve aventura; no entanto, tornou-se uma verdadeira dor de cabeça. Como esperado na prática, estou descobrindo que troquei um problema por outro. Tendo a ser um programador obsessivo, quero fazer as coisas da maneira certa para obter os resultados certos e, possivelmente, me tornar um programador melhor. O padrão MVVM acabou de ser reprovado em meu teste de produtividade e acabou de se tornar um grande hack nojento!
O caso claro é adicionar suporte para uma caixa de diálogo Modal. A maneira correta é abrir uma caixa de diálogo e vinculá-la a um modelo de vista. Fazer isso funcionar é difícil. Para se beneficiar do padrão MVVM, você deve distribuir o código em vários lugares através das camadas de seu aplicativo. Você também deve usar construções de programação esotéricas, como modelos e expressões de lamba. Coisas que fazem você ficar olhando para a tela e coçando a cabeça. Isso torna a manutenção e a depuração um pesadelo esperando para acontecer, como descobri recentemente. Eu tinha uma caixa sobre funcionando bem até que recebi uma exceção na segunda vez que a invoquei, dizendo que ela não poderia mostrar a caixa de diálogo novamente depois de fechada. Tive que adicionar um manipulador de eventos para a funcionalidade de fechamento da janela de diálogo, outro na implementação IDialogView dele e finalmente outro no IDialogViewModel. Achei que o MVVM nos salvaria de tal hackeagem extravagante!
Existem várias pessoas por aí com soluções concorrentes para este problema e todas são hacks e não fornecem uma solução limpa, facilmente reutilizável e elegante. A maioria dos kits de ferramentas MVVM encobrem os diálogos e, quando os abordam, são apenas caixas de alerta que não requerem interfaces personalizadas ou modelos de visualização.
Estou planejando desistir do padrão de visualização MVVM, pelo menos sua implementação ortodoxa dele. O que você acha? Valeu a pena se você tivesse algum? Sou apenas um programador incompetente ou o MVVM não é o que foi anunciado?