Uma vez, iniciei um projeto MVVM / WPF, que acabou sendo construído e implantado, e para isso estudei muito o Caliburn.Micro MVVM Framework. O fato é: acabei não usando o Caliburn.Micro para isso e acabei implementando alguns conceitos do MVVM (especificamente, apenas as classes ViewModelBase
e RoutedCommand
).
Agora, fui designado para um projeto um pouco maior nas mesmas linhas: um "Aplicativo de desktop offline de cliente único e rico para clientes", por assim dizer, e decidi usar o Caliburn.Micro. E é aí que o meu "problema" começa.
Eu li neste famoso post no blog , cujo título diz que "Se você estiver usando o MVVM, precisará de uma estrutura", que:
"Tentar fazer algo como o MVVM sem uma estrutura é uma enorme quantidade de trabalho. Toneladas de código duplicado, reinventar a roda e treinar novamente as pessoas para pensarem de maneira diferente .
Pelo menos com uma estrutura, você evita o código duplicado e, esperançosamente, não precisa reinventar a roda - permitindo que você se concentre em treinar as pessoas. A parte de reciclagem é geralmente inevitável, mas uma estrutura fornece código e estrutura de encanamento, facilitando o processo. "
Eu concordaria com a primeira leitura, mas minha experiência real com Caliburn.Micro (CM) em minha aplicação atual é de falta de noção e desorientação. Ou seja, a estrutura não facilitou o processo, muito pelo contrário. Lendo os exemplos sempre repetidos fornecidos por Rob Eisenberg na documentação informal (também) informal e tentando inferir padrões de uso a partir das amostras complicadas fornecidas e de seus relacionamentos de classe e interface totalmente indiretos, nos quais as coisas parecem ter sido projetadas para funcionar com base em efeitos colaterais, parece humanamente impossível, a menos que você seja um gênio experiente (desculpe o discurso retórico, mas acho que você sabe o que quero dizer).
Sem mencionar que qualquer cenário acima do trivial parece envolver contêineres de IoC, algo com o qual nunca trabalhei e que parece resolver um problema que talvez nem tenha . Não me apetece passar mais horas do projeto aprendendo essas coisas, em vez de pensar nos meus problemas e domínios de aplicativo. Eu só queria uma banana, mas CM me deu um gorila (IoC) segurando uma cesta de bananas.
Agora que estou pensando em voltar para minha estrutura MVVM caseira - composta apenas por algumas classes específicas de MVVM que realmente quero implementar -, gostaria de pelo menos dar uma chance ao CM, caso esteja perdendo algo aqui, ou simplesmente fazendo as coisas "do jeito errado" por pura inexperiência e ignorância. E então a questão é:
Há um consenso generalizado de que "estruturas tornam as coisas mais fáceis e mais naturais", mas se eu estiver enfrentando o contrário, isso significa que não devo usar a estrutura ou que estou tentando aprender da maneira errada? Existe uma pista de que eu nem deveria estar usando uma estrutura em primeiro lugar? Ou existe alguma maneira "certa" de descobrir como usar o CM para o desenvolvimento simples do MVVM?
RelayCommand
implementação (uma vez que "se liga" diretamente aos métodos por convenção, em vez de se ligar às propriedades ICommand).
RelayCommand
de outra biblioteca se a usada pelo Caliburn Micro não funcionar para você.
EventAggregator
para mensagens eNotificationObject
para um ViewModelBase, e MVVM LightRelayCommand
para comandos. O importante é identificar quais problemas a estrutura resolverá para você e usar apenas essas soluções. Não se sinta obrigado a usar toda a biblioteca de estruturas.