Поздний вход в обсуждение, так как я не хочу начинать новый вопрос. Я пришел к тому, чтобы определить наилучшую практику применения проекта ASP.NET MVC среднего размера.
Позвольте мне сначала обобщить наши варианты: -
1) IDataErrorInfo прост в реализации. Все, что вам нужно, это получить IDataErrorInfo в вашем классе Model. Суть в том, что вы позволяете привязке вашей модели обеспечивать соблюдение ваших бизнес-правил. Бизнес-правила должны соблюдаться моделью. Другой улов для IDataErrorInfo (и аналогично для DataAnnotations) заключается в том, что (перефразируя книгу Стивена Сандерсона , он не мог сообщать о множественных ошибках, относящихся к одному свойству, или множественных ошибках, относящихся к единой объектной модели.
2) DataAnnotation для меня, как проверка схемы (проверка). Это первая проверка, которую должно сделать ваше приложение. Однако (ИМХО) он не подходит для реализации ваших бизнес-правил.
3) Реализуйте свой собственный ModelBinder. Хотя это можно сделать, но, если говорить серьезно, использование ModelBinder для анализа и привязки ваших данных к вашей модели, а не для выполнения сложных проверок и проверок бизнес-правил. Я бы оставил проверку бизнес-правил на уровне вашей модели / домена.
4) Roll your own - Проверка с помощью сервисного уровня (см. this . Преимущество показанного примера состоит в том, что он отделяется от Controller и Model State с помощью класса интерфейса. Другой вариант - бросить соответствующий исключение из уровня модели. Последний вариант полезен при реализации уровня обслуживания в отдельном приложении (например, приложении WCF).
Что вы думаете? Для проектов среднего и большого размера, какой из перечисленных выше вариантов вы использовали (или намереваетесь принять) и почему?
Приветствия