Являются ли Microsoft Code Contracts неподходящими для проверки ввода пользователя?
Я видел, что в SO написано, что, хотя прикладной блок валидации корпоративных библиотек ориентирован на проверку вводимых пользователем данных, кодовые контракты предназначены для предотвращения ошибок программистов. Вы бы поддержали это мнение? Зачем?
3 ответа
Да.
Контракты кода предназначены для сохранения строгого интерфейса программирования, который только разработчик может понять правильно или неправильно; пользователь не должен быть в состоянии испортить это.
Проверка предназначена для проверки данных; Например, проверяемые данные не равны нулю или соответствуют регулярному выражению.
Кодовые контракты генерируют исключения, когда они нарушаются. Неправильный пользовательский ввод не является исключительным условием, поэтому функции проверки обычно не должны генерировать исключения. Вот почему такие методы, как TryParse
были добавлены в Framework (в оригинальном Framework их не было, и это сделало проверку громоздкой из-за всех возможных исключений).
Контракты кода используются для утверждения вещей, которые всегда будут верными, и если они не верны, то в коде есть ошибка. Это означает, что он может применяться только к условиям, которые контролируются кодом. Таким образом, вы не можете использовать их для указания "пользователь никогда не предоставит пустую строку", потому что это находится вне контроля кода. Статический верификатор никогда не сможет доказать это утверждение - как он может знать, что будет делать пользователь?
То, что вы можете сделать, это сделать операторы типа "Учитывая пользовательский ввод, метод либо возвратит непустую строку, либо выдаст исключение".