Каковы некоторые рекомендации для проверки модели в ASP.NET MVC? - PullRequest
1 голос
/ 17 сентября 2009

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

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

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

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

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

Спасибо!

1 Ответ

2 голосов
/ 17 сентября 2009

Нет ничего плохого в том, чтобы позволить модели проверять операции сохранения; возможно даже вернуть 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

...