Esto es una especie de solicitud compleja, y honestamente, probablemente variará según las preferencias más que cualquier otra cosa. Sin embargo, aquí está mi entendimiento:
- Rendimiento: Las excepciones se pierden casi todo el tiempo a menos que las otras implementaciones son horrendas. Hay una sobrecarga significativa para el ciclo de lanzamiento/captura. (Anécdota: tuve una verificación 'debe ser un número' que fue una excepción, se "rezagó" la IU durante un tiempo notable cuando falló, pero cuando se convirtió a una ValidationRule fue efectivamente instantánea.)
- Fugas de memoria: esto depende de cómo se realicen las reglas de validación o las implementaciones de IDataErrorInfo.
- Mantenibilidad del código, reutilización: Esta es la parte interesante, por supuesto. Lo que realmente debería preguntarse es "¿cuándo es apropiado usar una ValidationRule en lugar de IDataErrorInfo o viceversa?"
ValidationRules son anteriores a IDataErrorInfo (creo que este último se introdujo en .Net 3.5). Basado solo en esto, parecería que el equipo de WPF prefiere IDataErrorInfo. Pero la verdad es que están hechos para cosas diferentes. Si tiene MVVM o un patrón equivalente, IDataErrorInfo es superior para los errores en el modelo (como, por ejemplo, una edad negativa) mientras que las ValidationRules son superiores para los errores en la vista (por ejemplo, una edad de ☃). Por supuesto, es posible hacer que las ValidationRules realicen comprobaciones de "lógica comercial", o que IDataErrorInfo le diga "un muñeco de nieve Unicode no tiene una antigüedad válida", pero (probablemente) obtendrá la mejor capacidad de mantenimiento si mantiene este patrón.
Pero no use excepciones para la validación más allá de la prueba inicial para ver qué condiciones exactas debe probar.
Hoy estaba leyendo en IDataErrorInfo, parece que es anterior a ValidationRule, parece que la interfaz IDataErrorInfo ha estado presente desde Framework 1.1 (http://msdn.microsoft.com/en-us/library/system.componentmodel.idataerrorinfo_properties (v = VS.71) .aspx) pero ValidationRule desde Framework 3.0. No creas que fundamentalmente cambia tu respuesta – GrahamMc