IDataErrorInfo по сравнению с ValidationRule по сравнению с исключением

Может любой говорить мне, который является лучшим подходом для Проверки в WPF.

  1. Реализация IDataErrorInfo
  2. Создание ValidationRule
  3. Выдавание исключения

с точки зрения производительности, утечек памяти, надежности кода и повторного использования.

19
задан Bevan 20 September 2011 в 04:39
поделиться

1 ответ

Это довольно сложный запрос, и, честно говоря, он, вероятно, будет варьироваться в зависимости от предпочтений больше, чем что-либо еще.Но вот мое понимание:

  • Производительность : исключения будут проигрывать почти каждый раз, если другие ваши реализации не будут ужасными. В цикле броска / ловли есть значительные накладные расходы. (Анекдот: у меня была проверка «должно быть числом», которая была исключением, она «отставала» от пользовательского интерфейса на заметное время при сбое, но при преобразовании в ValidationRule она выполнялась практически мгновенно.)
  • Утечки памяти : это зависит от того, как выполняются ваши правила проверки или реализации IDataErrorInfo.
  • Возможность сопровождения кода, повторное использование : Конечно, это интересная часть. На самом деле вы должны спросить: «Когда уместно использовать ValidationRule вместо IDataErrorInfo или наоборот?»

ValidationRules старше, чем IDataErrorInfo (я считаю, что последнее было введено в .Net 3.5). Исходя только из этого, может показаться, что команда WPF предпочитает IDataErrorInfo. Но правда в том, что они созданы для разных целей. Если у вас есть MVVM или эквивалентный шаблон, IDataErrorInfo лучше подходит для ошибок в модели (например, отрицательный возраст), тогда как ValidationRules лучше для ошибок в представлении (скажем, возраст ☃). Конечно, возможно, чтобы ValidationRules выполняли проверки «бизнес-логики» или чтобы IDataErrorInfo сообщал вам, что «снеговик в Юникоде не является допустимым возрастом», но вы (вероятно) получите лучшую ремонтопригодность, придерживаясь этого шаблона.

Но не используйте исключения для проверки за пределами первоначального тестирования, чтобы увидеть, какие именно условия вы должны тестировать.

23
ответ дан 30 November 2019 в 04:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: