Контроллеры: AFAIK Вам не нужно делать ничего особенного, чтобы выбросить контроллеры в их собственную сборку. Самое большее, что вам нужно сделать, это переопределить метод GetControllerType вашего ControllerFactory.
Модели: Ноль ограничений на то, где вы размещаете свои модели. Хотя это неодобрительно, я регулярно использую постоянные объекты из DTO уровня Nhibernate / другого или DTO уровня WCF / сервиса, которые расположены в отдельной сборке как мои представления. Это работает так же, как при использовании WebForms .
Представления: Представления в отдельной сборке должны быть помечены как встроенный ресурс, а затем вы должны использовать пользовательский VirtualPathProvider , который знает, как получить представления из ресурса вместо файла система. просмотров из ресурса вместо файловой системы . Опять же, это точно такой же метод, который вы бы использовали для разработки WebForm.
Относительно mcintyre321 и его ответа Portable Areas: Связанный проект делает только что-то нестандартное и просто объединяет существующие точки расширения MVC 2 в более простую в использовании абстракцию. Её «нестандартный» и более синтаксический сахар.
Вы управляете большим приложением MVC так же, как и любым другим крупным приложением. Я боюсь открывать 500-страничный проект WebForms, потому что вы никогда не знаете, что в каждом из этих кодов позади. С MVC отличная функциональность в основном на своем месте. Это совсем не наоборот.