Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Лапшекодим валидацию, или запрещаем вводить неправильные данные?

04.10.22 22:27
Re: Лапшекодим валидацию, или запрещаем вводить неправильные данные?
 
alex445 коренной житель
в ответ alex445 12.06.22 13:03, Последний раз изменено 04.10.22 22:30 (alex445)

Блин, снова эта валидация всплывает. Встречаю в коде такую лапшу:


- проверка, не пустое ли введённое значение - если пустое, то пишем сообщение об ошибке (типа "введите число");

- проверка через эксепшены, парсится ли введённое значение (типа метода int.Parse), и если нет - пишем сообщение об ошибке (типа "введите целое число");

- если парсится, то проверяем на неотрицательность числа - если отрицательное, то пишем сообщение об ошибке (типа "введённое число должно быть неотрицательным").


Вся эта лапша на десятки, если не сотни строк кода, куча сообщений об ошибках на все вкусы. Ещё и вся эта хрень логируется (ввёл пользователь отрицательное число - СРОЧНО В ЛОГ!) Я ещё удивился, а что так мало проверок и сообщений? Почему не минимум десять, например?


Мой вариант - пишем рядом с полем подсказку типа "значение должно быть целым неотрицательным" или ещё проще - диапазон (0 - 200) и дизейблим зависимые контролы, пока пользователь не введёт правильное число. И больше не пишем никаких сообщений об ошибках. Когда введёт правильное - енейблим контролы. ВСЁ! Проверки по сути те же самые, что и в первом варианте, с той лишь разницей, что мы не грузим пользователя бесконечными сообщениями на каждый неверный шажок и не лапшекодим менеджент всех этих сообщений. Разница в читаемости кода и понятности в разы... Единственный минус, что пользователи-олигофрены могут не понять - как это, мол, "введите целое неотрицательное число"? Поподробнее можно? Давайте я буду вводить буквы и знаки, а вы на каждый введённый символ мне кучку сообщений выдавать, чтобы я знал, где ошибся?


Я, конечно, понимаю, что некоторым прикольно сидеть и лапшекодить сотни строк на всю эту муйню - целый день был занят, один контрол закодил. И обязательно пачку юнит-тестов! А вто вдруг какое-то сообщение из десятка пропустил. И вот у нас пять экранов кода, которые делают, по сути, никуя, кроме как толкут воду в ступе... Смотрю на свой текущий проект - если весь этот олигофренский подход убрать и переписать, кодовая база на порядок уменьшится. Правда, команда тогда не получит по семь знаков на рыло (а фигли - серьёзный проект делали несколько лет индусским лапшекодом!) и не отъедет всем кагалом на пенсию в Майами. ))

 

Перейти на