Нет ничего плохого в том, чтобы позволить модели проверять операции сохранения; возможно даже вернуть false или сгенерировать исключение. Сложность возникает тогда, когда вы должны предоставить пользователю обратную связь о том, почему его введенные данные недействительны.
Проверка может и должна произойти в представлении сначала. Это можно легко сделать на стороне клиента с помощью библиотек jQuery. Но данные все равно должны проверяться на стороне сервера после того, как пользователь отправляет их, и если с данными все еще остаются проблемы, вы все равно должны предоставить объяснение пользователю.
Из-за необходимости предоставления обратной связи с пользователем, проверка на стороне сервера такого рода может быть эффективно предоставлена в объекте View Model . Этот объект данных служит двум целям: во-первых, он инкапсулирует данные, которые проходят между представлением и контроллером, в строго типизированный объект. Во-вторых, он предоставляет удобное место для выполнения проверки, не требуя логики проверки ни в контроллере, ни в представлении.
Если используется Linq to SQL, модель представления может быть расширением фактического класса модели данных, используя ключевое слово part в C #. Это позволяет вам использовать существующие возможности ORM сгенерированного класса Linq to SQL, в то же время добавляя дополнительные функции проверки. Я предполагаю, что это работает так же в Entity Framework и других ORM.
Модели просмотра описаны в руководстве по NerdDinner здесь:
http://nerddinnerbook.s3.amazonaws.com/Part6.htm
Процесс проверки описан здесь:
http://nerddinnerbook.s3.amazonaws.com/Part3.htm