Каковы некоторые рекомендации по проверке модели в ASP.NET MVC?

StackOverflow https://stackoverflow.com/questions/1436006

Вопрос

Меня не интересуют ответы, касающиеся проверки на стороне клиента или привязки модели.Действительно, этот вопрос мог бы относиться к любой библиотеке классов доступа к данным за пределами MVC, но, я думаю, проблемы схожи.

В настоящее время я использую шаблон репозитория для доступа к данным с помощью моих сущностей (моделей).В настоящее время репозитории обрабатывают все операции CRUD, но я думаю, что хотел бы, чтобы мои модели отвечали за самосохранение для выполнения проверки.Как я должен справиться с этим?

Я мог бы добавить метод isValid в свои модели, который могли бы вызывать репозитории, который затем мог бы запускать всю мою бизнес-логику до того, как репозиторий сохранит модель, но тогда ничто не заставляет репозитории вызывать эту логику проверки, верно?

Если я хочу, чтобы у моделей был метод сохранения, то каков правильный способ для них сохранить себя?Они не должны перезванивать обратно в Репозиторий, не так ли?

Есть какие-нибудь мысли о том, как мне следует с этим справиться?

Спасибо!

Это было полезно?

Решение

По сути, нет ничего плохого в том, чтобы разрешить модели проверять операции сохранения;возможно даже вернуть false или выдать исключение.Трудность возникает, когда затем вы должны предоставить пользователю обратную связь относительно того, почему введенные им данные недействительны.

Проверка может и должна сначала выполняться в представлении.Это можно легко сделать на стороне клиента, используя библиотеки jQuery.Но данные все равно должны быть проверены на стороне сервера после отправки пользователем, и если с данными все еще возникают проблемы, вы все равно должны предоставить объяснение пользователю.

Из-за необходимости предоставлять отзывы пользователей, проверка на стороне сервера такого рода может быть эффективно обеспечена в Просмотр Модели объект.Этот объект данных служит двум целям:во-первых, он инкапсулирует данные, которые передаются между представлением и контроллером, в строго типизированный объект.Во-вторых, это обеспечивает удобное место для выполнения проверки, не требуя логики проверки ни в контроллере, ни в представлении.

Если используется Linq to SQL, модель представления может быть расширением фактического класса модели данных, используя ключевое слово partial в C #.Это позволяет вам использовать существующие возможности ORM сгенерированного класса Linq to SQL, одновременно подключая дополнительные функции проверки.Я предполагаю, что это работает таким же образом в Entity Framework и других ORM.

Модели просмотра описаны в руководстве NerdDinner здесь:http://nerddinnerbook.s3.amazonaws.com/Part6.htm

Процесс проверки описан здесь:
http://nerddinnerbook.s3.amazonaws.com/Part3.htm

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top