Estou criando um aplicativo WPF usando o padrão MVVM. No momento, meus viewmodels chamam a camada de serviço para recuperar modelos (como não é relevante para o viewmodel) e convertê-los em viewmodels. Estou usando a injeção de construtor para passar o serviço necessário para o viewmodel.
É facilmente testável e funciona bem para viewmodels com poucas dependências, mas assim que tento criar viewModels para modelos complexos, tenho um construtor com MUITOS serviços injetados (um para recuperar cada dependência e uma lista de todos os valores disponíveis para vincular a um itemsSource, por exemplo). Eu estou querendo saber como lidar com vários serviços como esse e ainda tenho um modelo de exibição que eu possa testar facilmente.
Estou pensando em algumas soluções:
Criando um singleton de serviços (IServices) contendo todos os serviços disponíveis como interfaces. Exemplo: Services.Current.XXXService.Retrieve (), Services.Current.YYYService.Retrieve (). Dessa forma, não tenho um construtor enorme com muitos parâmetros de serviços.
Criando uma fachada para os serviços usados pelo viewModel e passando esse objeto no ctor do meu viewmodel. Mas então, terei que criar uma fachada para cada um dos meus modelos de visualização complexos, e pode ser um pouco demais ...
O que você acha que é a maneira "certa" de implementar esse tipo de arquitetura?
new
para criar outros modelos de vista, mas pense em algo tão simples quanto um aplicativo MDI em que clicar no botão ou menu "novo documento" adicionará uma nova guia ou abrirá uma nova janela. O shell / condutor deve ser capaz de criar novas instâncias de algo , mesmo se estiver oculto atrás de uma ou algumas camadas de indireção.