Каковы некоторые рекомендации по проверке модели в ASP.NET MVC?
-
07-07-2019 - |
Вопрос
Меня не интересуют ответы, касающиеся проверки на стороне клиента или привязки модели.Действительно, этот вопрос мог бы относиться к любой библиотеке классов доступа к данным за пределами 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