1) Это может быть да, но лучшим подходом было бы использование Аннотации данных на ViewModel.
2) Подойдет одна модель.Модель должна представлять общий объект, в данном случае «Пользователь».Если информация, необходимая для каждого вида, сильно отличается, разделите их на модели вида.
3) Не совсем понятно, что вы имеете в виду.MVC (и ASP.NET в целом) основан на протоколе HTTP и, таким образом, не имеет состояния .Поэтому, когда вы нажимаете URL, назначается контроллер, а затем объекты обновляются, как того требует код - это включает соединение с базой данных.Затем, когда запрос завершен, все пропало (все равно управляемые ресурсы).Постарайтесь не запутаться со словом «модель».Это не физическая сущность, а область вашей модели программирования.
4) Как правило, вашей «моделью» является ваш репозиторий / DAL / ORM, который охватывает вашу базовую базу данных и представляет вашу модель домена .Ваше мнение не должно касаться домена.Это работа вашего контроллера / модели.Ваш вид должен работать с тем, что ему нужно, и не более.Вот почему, как правило, никогда не привязывается напрямую к модели ORM, используйте ViewModel.
Редактировать - в ответ на вопросы в комментариях:
Извините ... за 1, Аннотации данных предполагают, что проверка выполняется на модели, но также OpenId.Identifierпредоставляет некоторые функции, которые могут проверять ввод (например, TryParse), поэтому было бы более последовательным выполнять всю проверку на модели, или «место» проверки обычно не столь строгое?
Putаннотации данных в ViewModel , которые являются представлениями модели, созданной для облегчения представления.Аннотации данных не должны быть наложены на ваши сущности модели (Entity Framework, L2SQL и т. Д.).Аннотации данных должны использоваться для проверки ввода (сравнение паролей, длины символов, телефонных номеров, адресов электронной почты и т. Д.). Проверка бизнеса должна проводиться в домене.Я бы сказал, что OpenId - это сервис, а не часть домена.Если у них есть некоторые функции проверки, вы можете обернуть эти вызовы в пользовательские аннотации данных и поместить их в свою модель представления.Это был бы чистый и последовательный подход.
Для 3 я согласен с тем, что протокол HTTP не имеет состояния, но если я правильно понимаю, куки являются одним из способов поддержания состояния, а модель предоставляет альтернативный способ.,
Ваше право, куки - это один из способов сохранить состояние.Обычное использование для этого - билет проверки подлинности с помощью форм.Еще одна сессия. TempData использует сессию (умным способом - автоматический выброс).Модель не является «альтернативным способом» - она не поддерживает состояние.Подробнее об этом поговорим ниже.
В прикладном программировании состояние (т. Е. Объект) обычно является постоянным на протяжении всего жизненного цикла приложения, поэтому, если бы мне пришлось создавать модель в консольном приложении, этосуществовать до тех пор, пока есть ссылка на него.Поэтому, когда вы говорите, что «объекты обновлены», это означает, что объект Model уже создан (как в консольном приложении), и я просто «обновляю» его, или это означает, что я создаю новую модель?
В консольном приложении - ваше право.Пока консольное приложение работает, объекты живы.Но в веб-приложении ASP.NET MVC «родителем» является рабочий поток ASP.NET, назначаемый при поступлении запроса. Все необходимые объекты (контроллер, соединение с базой данных, хранилище, объекты домена) являются «потомками»этот поток, если это имеет смысл.Как только этот поток исчезнет, исчезнут все связанные объекты.
Опять не существует "волшебного воплощения" модели - модель представляет собой общее представление / представление вашего домена, которое обычно состоит из модели домена (сущности, бизнес-логика)и хранилище.
Единственное исключение - "привязка к модели". Когда вы отправляете форму для действия [HttpPost]
, которое строго типизировано для «модели» (должен быть ViewModel). ASP.NET MVC (через отражение) построит эту «модель» на основе полей в HTTP POST.
Когда вы делаете что-то вроде «UpdateModel», все, что вы делаете, это обновляет объект, который вы предоставляете, тем, что поступило в метод действия через привязку модели. Фактическая база данных не обновляется.
Не знаю, что еще я могу сказать. Похоже, у вас возникает путаница по поводу «модели». Могу я предложить вам взять книгу Стивена Сандерсона Pro ASP.NET MVC 2 Framework . Это фантастика, объясняет все с нуля - простыми словами, затем наращивает темп, чтобы стать экспертом к концу книги.