Являются ли Microsoft Code Contracts неподходящими для проверки ввода пользователя? - PullRequest
4 голосов
/ 01 сентября 2010

Я видел, что в SO написано, что, хотя прикладной блок валидации корпоративных библиотек направлен на проверку пользовательских вводов, кодовые контракты предназначены для предотвращения ошибок программиста. Вы бы поддержали это мнение? Почему?

Ответы [ 3 ]

6 голосов
/ 01 сентября 2010

Да.

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

Проверка предназначена для проверки данных; например проверка данных не равна нулю или не соответствует регулярному выражению.

2 голосов
/ 01 сентября 2010

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

0 голосов
/ 20 мая 2013

Кодовые контракты используются для утверждения вещей, которые всегда будут верными, и если они не верны, то в коде есть ошибка. Это означает, что он может применяться только к условиям, которые контролируются кодом. Таким образом, вы не можете использовать их для указания «пользователь никогда не предоставит пустую строку», потому что это находится вне контроля кода. Статический верификатор никогда не сможет доказать это утверждение - как он может знать, что будет делать пользователь?

Что вы можете сделать, это сделать операторы типа «При вводе данных пользователем метод либо возвратит непустую строку, либо выдаст исключение».

...