У MVC Модель - це не просто DTO або набір менеджерів / служб, але це означає, що вони представляють концепції, які ваша програма моделює. Ви можете вважати це цілим доменом або бізнес-логікою, включаючи стан та поведінку. Тепер, враховуючи, що ми знаємо, що призначення контролера стає дещо чіткішим. Його завдання полягає в простому перекладі команд на Модель, а результат назад на види. Зазвичай це робиться у вигляді ViewModels, які відрізняються, але часто плутають з Model у MVC.
Якщо у вас немає чітко визначеної моделі, то, можливо, ви потрапили до того, що більшість цієї логіки зараз знаходиться в самих контролерах. У цей момент, щоб почати зменшувати розмір контролерів, ви можете почати перетягувати цю логіку назад в менеджер або сервісні об’єкти. Ці сервіси, як правило, повертаються та працюють на об'єктах типу DTO / Entity. Тоді контролер стає шаром відображення між цими службами та моделями перегляду. Кілька корисних порад щодо картографування ознайомтеся з цією статтею. Друзі не дозволяють друзям використовувати AutoMapper .
Що стосується ваших питань, то перше багато залежить від ваших заявок. Вам потрібно буде робити рефакторинг по шляху, який повинен стати більш очевидним, як тільки ви вилучите логіку з контролерів. Що стосується тестування, то тут немає проблем з інстанційними моделями всередині сервісів, але якщо вам здається, що тестування складно, це, мабуть, лише знак того, що вам потрібно розбити службу на більш дрібні частини, кожна з яких є однією відповідальністю.