Я создаю то, что я называю «ViewModel» для каждого представления. Я поместил их в папку с именем ViewModels в моем веб-проекте MVC. Я называю их в честь контроллера и действия (или представления), которые они представляют. Поэтому, если мне нужно передать данные в представление SignUp на контроллере Membership, я создаю класс MembershipSignUpViewModel.cs и помещаю его в папку ViewModels.
Затем я добавляю необходимые свойства и методы для облегчения передачи данных из контроллера в представление. Я использую Automapper для перехода из моей ViewModel в модель домена и обратно, если необходимо.
Это также хорошо работает для составных моделей представления, которые содержат свойства, относящиеся к типу других моделей представления. Например, если у вас есть 5 виджетов на странице индекса в контроллере членства, и вы создали ViewModel для каждого частичного представления - как вы передаете данные из действия Index в партиалы? Вы добавляете свойство в MembershipIndexViewModel типа MyPartialViewModel и при рендеринге частичного вы передаете в Model.MyPartialViewModel.
Делая это таким образом, вы можете настроить частичные свойства ViewModel без необходимости вообще менять представление индекса. Он по-прежнему просто передается в Model.MyPartialViewModel, поэтому меньше шансов, что вам придется пройти через всю цепочку партиалов, чтобы что-то исправить, когда все, что вы делаете, это добавление свойства в частичную ViewModel.
Я также добавлю пространство имен «MyProject.Web.ViewModels» в web.config, чтобы я мог ссылаться на них в любом представлении, даже не добавляя явный оператор импорта для каждого представления. Просто делает его немного чище.