No MVC, o Modelo, não é apenas um DTO ou um conjunto de Gerentes / Serviços, ele representa os conceitos que seu aplicativo está modelando. Você pode pensar nisso como o domínio inteiro ou a lógica de negócios, incluindo estado e comportamentos. Agora, já que sabemos que o objetivo do controlador se torna um pouco mais claro. Seu trabalho é simplesmente converter comandos no modelo e o resultado de volta nas visualizações. Isso geralmente é feito na forma de ViewModels que são diferentes, mas geralmente confundidos com o modelo no MVC.
Se você não possui um Modelo bem definido, pode ter chegado ao ponto em que a maior parte dessa lógica agora reside nos próprios Controladores. Neste ponto, para começar a reduzir o tamanho de seus controladores, você pode começar a puxar essa lógica de volta aos objetos de gerente ou serviço. Esses serviços geralmente retornam e operam em objetos como DTO / Entidade. Em seguida, o controlador se torna a camada de mapeamento entre esses serviços e os modelos de exibição. Para obter algumas boas dicas de mapeamento, dê uma olhada neste artigo. Amigos não permitem que amigos usem o AutoMapper .
Quanto às suas perguntas, a primeira depende muito de suas aplicações. Você precisará refatorar ao longo do caminho, o que deve ficar mais aparente quando você remover a lógica dos controladores. Quanto ao teste, não há problema em instanciar modelos dentro dos serviços; no entanto, se você acha difícil testar, provavelmente é apenas um sinal de que você precisa dividir o serviço em partes menores, cada uma com uma única responsabilidade.