Валидация данных и отображение ошибок валидации в WPF - CodeHelper

Валидация данных и отображение ошибок валидации в WPF

2

Какой наиболее распространенный и гибкий способ проверки валидности модели? Должна ли модель сама проверять себя? Ну и применительно к WPF, как отображать ошибки в данных?

Потратив на данный вопрос несколько дней, пришел к выводу, что наиболее верный способ - это реализация IDataErrorInfo объектами модели. При этом получаем полную поддержку вывода ошибок в интерфейсе пользователя. Почти без какой-либо дополнительной работы. Об этом можно почитать тут и тут.

Однако непонятно, что делать, если объект модели, реализующий IDataErrorInfo, содержит свойство типа IDataErrorInfo. И это главный мой вопрос :)

Так же есть несколько фреймворков для валидации данных и ввода пользователя:

  1. .net Validation Framework. К недостаткам можно отнести то, что модели, построенные на основе его классов, не имеют конструкторов по умолчанию, ди вообще тянут за собой длинный хвост. Достоинства: интересная система реализации правил валидации в виде атрибутов к свойствам объекта модели.
  2. ValidationAspects. Тут просто имеет место магическое AOP, вот и упомянул.

Из орудий более крупного калибра можно упомянуть:

  1. Caliburn. Предоставляет уже готовую поддержку валидации моделей и отображения ошибок валидации. Для молучения всех преимуществ рекомендуется наследоваться от классов фреймворка, определенных в сборке Caliburn.ModelFramework.
  2. Ocean. Не знаком, но хвалят.

Новые ответы


1

Вопрос о том, должна ли модель валидировать себя, вызывывает массу холиваров. Так же как вопрос о том, является ли валидация бизнес-логикой. В контексте WPF, возможно, дело обстоит иначе, потому что вид обычно имеет дело не с моделью предметной области, а с моделью вида (если, конечно, используется MVVM или подобный паттерн). Но, все-таки, лучший фреймворк валидации — тот, который минимально затрагивает классы модели и не тянет за собой «хвостов» в виде зависимостей. В частности, требование наследования модели от базового класса из библиотеки валидации кажется очень неприятным.

Для ASP.NET MVC сейчас активно продвигается валидация с помощью Data Annotations. Не знаю, имеется ли в настоящий момент поддержка для WPF, но есть подозрения, что в будущем этот механизм станет стандартным для технологий MS. Достоинство Data Annotations в их легковесности. Отдельная DLL (System.ComponentModel.DataAnnotations.dll) содержит атрибуты, которыми нужно помечать свойства классов предметной области. При этом System.ComponentModel.DataAnnotations — стандартное пространство имен .NET и не тянет за собой никаких зависимостей, так как не включает логику отображения ошибок для какого-то конкретного движка (WinForms, WPF, WebForms, MVC и тд).


v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.