In MVC il modello non è solo un DTO o un insieme di manager / servizi che intende rappresentare i concetti che la tua applicazione sta modellando. Puoi pensare a questo come all'intero dominio o alla logica aziendale, inclusi stato e comportamenti. Ora dato che sappiamo che lo scopo del controller diventa un po 'più chiaro. Il suo compito è semplicemente quello di tradurre i comandi nel Modello e il risultato nelle viste. Questo viene solitamente eseguito sotto forma di ViewModels che sono diversi ma spesso confusi con il modello in MVC.
Se non si dispone di un modello ben definito, è possibile che si sia arrivati al punto in cui la maggior parte di tale logica risiede ora nei Controller stessi. A questo punto, per iniziare a ridurre le dimensioni dei controller, è possibile iniziare a reinserire questa logica in oggetti di gestione o di servizio. Questi servizi in genere restituiscono e operano su oggetti come DTO / Entity. Quindi il controller diventa lo strato di mappatura tra questi servizi e i modelli di vista. Per alcuni buoni consigli sulla mappatura, consulta questo articolo Gli amici non consentono agli amici di utilizzare AutoMapper .
Per quanto riguarda le tue domande, la prima dipende molto dalle tue applicazioni. Dovrai eseguire il refactoring lungo la strada che dovrebbe diventare più evidente una volta rimossa la logica dai controller. Per quanto riguarda i test, non vi è alcun problema a istanziare i modelli all'interno dei servizi, tuttavia se lo trovate difficile da testare è probabilmente solo un segno che è necessario suddividere il servizio in parti più piccole, ciascuna con una singola responsabilità.