Questa è una specie di richiesta complessa e, onestamente, probabilmente cambierà in base alle preferenze più di ogni altra cosa. Ma, ecco la mia comprensione:
- Prestazioni: Eccezioni perderanno quasi ogni volta a meno che le vostre altre implementazioni sono terribili. C'è un overhead significativo del ciclo throw/catch. (Aneddoto: ho avuto un controllo "deve essere un numero" che era un'eccezione, "ritardato" l'interfaccia utente per un tempo notevole quando non è riuscito, ma una volta convertito in un ValidationRule era effettivamente istantaneo.)
- Perdite di memoria: dipende da come vengono eseguite le regole di convalida o le implementazioni IDataErrorInfo.
- Codice manutenzione, riutilizzo: questa è la parte interessante, ovviamente. Quello che dovresti veramente chiedere è "quando è opportuno usare un ValidationRule invece di IDataErrorInfo o viceversa?"
ValidationRules sono precedenti a IDataErrorInfo (credo che quest'ultimo sia stato introdotto in .Net 3.5). Sulla base di ciò, sembrerebbe che il team WPF preferisca IDataErrorInfo. Ma la verità è che sono costruiti per cose diverse. Se hai MVVM o uno schema equivalente, IDataErrorInfo è superiore per errori nel modello (come, ad esempio, un'età negativa) mentre ValidationRules sono superiori per errori nella vista (ad esempio, un'età di ☃). Ovviamente, è possibile che ValidationRules esegua verifiche di "business logic", o che l'IDataErrorInfo indichi "un pupazzo di neve unicode non è un'età valida", ma si otterrà (probabilmente) la migliore manutenibilità mantenendo questo schema.
Tuttavia, non utilizzare eccezioni per la convalida oltre il test iniziale per vedere quali condizioni esatte si dovrebbero testare.
Oggi stava leggendo su IDataErrorInfo - sembra che sia più vecchio di ValidationRule - sembra che l'interfaccia IDataErrorInfo sia presente sin dal Framework 1.1 (http://msdn.microsoft.com/en-us/library/system.componentmodel.idataerrorinfo_properties (v = VS.71) .aspx) ma ValidationRule dal Framework 3.0. Non pensare che cambi fondamentalmente la tua risposta però – GrahamMc