wpf idataerrorinfo

wpf - IDataErrorInfo vs ValidationRule vs Exception



(2)

¿Alguien puede decirme cuál es un mejor enfoque para la Validación en WPF?

  1. Implementando IDataErrorInfo
  2. Creando ValidationRule
  3. Lanzar excepciones

en términos de rendimiento, pérdidas de memoria, capacidad de mantenimiento del código y reutilización.


Este es un tipo de solicitud compleja y, honestamente, probablemente variará según las preferencias más que cualquier otra cosa. Pero, aquí está mi entendimiento:

  • Rendimiento : las excepciones se perderán casi siempre, a menos que sus otras implementaciones sean horrendas. Hay una sobrecarga significativa en el ciclo de lanzamiento / captura. (Anécdota: Tuve una verificación de ''debe ser un número'' que fue una excepción, "retrasó" 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 realizan las reglas de validación o las implementaciones de IDataErrorInfo.
  • Mantenimiento de código, reutilización : esta es la parte interesante, por supuesto. Lo que realmente debería preguntar es "¿cuándo es apropiado usar una ValidationRule en lugar de IDataErrorInfo o viceversa?"

Las ValidationRules son más antiguas que IDataErrorInfo (creo que esta última se introdujo en .Net 3.5). Basado solo en esto, parece que el equipo de WPF prefiere IDataErrorInfo. Pero la verdad es que están construidas 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 ValidationRules es superior para los errores en la vista (por ejemplo, una edad de). Por supuesto, es posible que las ValidationRules realicen verificaciones de "lógica de negocios" o que IDataErrorInfo le diga que "un muñeco de nieve de Unicode no es una edad válida", pero (probablemente) obtendrá la mejor capacidad de mantenimiento manteniendo 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.


No es una buena idea usar una excepción para el manejo de errores. El uso de la excepción reducirá el rendimiento. Se trata de seleccionar e implementar IDataErrorInfo o crear ValidationRule.

IDataErrorInfo

  • La lógica de validación se mantiene a la vista del modelo y es fácil de implementar y mantener.
  • Control total sobre todos los campos del modelo de visualización.

Regla de validación

  • Mantiene la regla de validación en clase separada.
  • Aumentar la reutilización. Por ejemplo, puede implementar la validación de campos obligatorios y reutilizarla en toda la aplicación.

Mi opinión es que, para validación común como validaciones de campo requeridas, validaciones de direcciones de correo electrónico, puede usar la regla de validación. Si necesita realizar validaciones personalizadas como validaciones de rango, o cualquier otra validación personalizada, use IDataerrorinfo.