DataAnnotations против IDataErrorInfo

DataAnnotations против IDataErrorInfo

Плюсы и минусы обоих? Преимущества одного перед другим? (особенно в отношении MVC)


person Martin    schedule 20.01.2010    source источник


Ответы (3)


Позднее вступление в обсуждение, так как не хочу начинать новый вопрос. Я исхожу из того, чтобы определить, как лучше всего применять к проекту ASP.NET MVC среднего размера.

Позвольте мне сначала резюмировать наши варианты: -

1) IDataErrorInfo просто реализовать. Все, что вам нужно, это получить IDataErrorInfo в вашем классе модели. Загвоздка в том, что вы позволяете привязке модели обеспечивать соблюдение ваших бизнес-правил. Модель должна обеспечивать соблюдение бизнес-правил. Другой уловкой для IDataErrorInfo (и аналогично для DataAnnotations) является то, что (перефразируя из Книга Стивена Сандерсона, он не мог сообщить о множественных ошибках, относящихся к одному свойству, или множественных ошибках, относящихся к объектной модели в целом.

2) DataAnnotation для меня похожа на проверку схемы (валидацию). Это первая проверка, которую должно выполнить ваше приложение. Однако (IMHO) он не подходит для реализации ваших бизнес-правил.

3) Реализуйте свой собственный ModelBinder. Хотя это можно сделать, но если серьезно, то использование ModelBinder заключается в анализе и привязке ваших данных к вашей модели, а не для выполнения сложных валидаций и проверок бизнес-правил. Я бы оставил проверку бизнес-правил для реализации на уровне модели / домена.

4) Сделайте свой собственный - Проверка с помощью уровня обслуживания (см. this. Преимущество показанного примера состоит в том, что он отделен от состояния контроллера и модели с помощью класса интерфейса. Другой вариант - создать соответствующее исключение на уровне модели. Последний вариант полезен при реализации уровня обслуживания. в отдельном приложении (например, приложении WCF).

Что вы думаете? Какие из вышеперечисленных вариантов вы использовали (или собираетесь принять) для проекта среднего и большого размера и почему?

Ваше здоровье

person Syd    schedule 09.06.2010
comment
Что касается пункта 1, я считаю, что INotifyDataErrorInfo будет поддерживаться в .Net 4.5 и обрабатывает несколько ошибок для одного свойства. - person pete the pagan-gerbil; 11.04.2012

Похоже, DataAnnotations получают официальную поддержку в MVC 2.0. Скотт Гатри опубликовал товар статья о проверке модели в версии 2.0 с помощью DataAnnotations. Учитывая, что команда, похоже, движется в этом направлении, вы можете считать, что голосование в ее пользу.

person tvanfosson    schedule 20.01.2010

DataAnnotations проще реализовать, и они получают прямую поддержку в MVC 2.0.

Однако IDataErrorInfo позволяет выполнять более сложную проверку (например, проверку, которая порождает несколько свойств и т. Д.).

Однако их можно смешивать и использовать вместе. Вам ничего не мешает применить оба метода.

person Reed Copsey    schedule 20.01.2010
comment
Это также возможно с ComponentModel.DataAnnotations с использованием интерфейса IValidatableObject. С помощью этого интерфейса вы также можете выполнить проверку, которая порождает несколько свойств. - person David Roth; 29.11.2012