русский
Germany.ruForen → Архив Досок→ Programmierung

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

2865  1 2 3 4 5 6 7 8 9 alle
Murr патриот05.10.22 16:51
Murr
NEW 05.10.22 16:51 
in Antwort alex445 04.10.22 22:27

пишем рядом с полем подсказку типа

------

И так - по всем 200+ полям на форме...

А когда осилишь - тебе еще с полсотни связанных таблиц кинут...

И так - с каждой формой.


И когда тебе все это надоест - ты таки начнешь писать свои контролы...

Murr патриот05.10.22 17:21
Murr
NEW 05.10.22 17:21 
in Antwort Murr 05.10.22 16:51

Да, про валидацию...


Заполнил сегодня форму.

Кликнул Сабмит...

Вылезла следующая валидация:


There is an error with this candidate:
Missing required field:

никаких других пометок нет.

Посмотрел - все заполнено.

Подумал, поменял в паре мест нолик на единичку... и все пошло...


А ты говоришь - валидация, много писанины...

7495 свой человек05.10.22 21:24
7495
NEW 05.10.22 21:24 
in Antwort Murr 05.10.22 17:21
никаких других пометок нет.

Посмотрел - все заполнено.

Подумал, поменял в паре мест нолик на единичку... и все пошло...


А ты говоришь - валидация, много писанины...



Ситуации разные бывают, когда тебе надо к примеру зарегистрировать машину, будешь вокруг компьютера вытанцовывать,

меняя нолики на единички, дополняя ноликами короткие номера, тк обрезают, а валидацию короткий не проходит итп итд.

пока не добьёшься не успокоишься... в худшем случае прозвон по телефону, на фирме девочки заносят данные от руки...


***

А теперь представим, ненапряжённую ситуацию, когда люди приходят добровольно, например рекламную акция - регистрация...

компания вбухивает мильёны денег в рекламу, проводит кучу праздников, - а люди почему то на странице не регистрируются???

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

и никаких ошибок система не выдаёт, логи не ведёт, МЕТРИКИ самое главное в этом бардаке тоже нет, чтоб исправить ошибку!


***


Это напоминает мне тему, где джунам всёравно точка или запятая, а людям в офисе разгребать лишние проблемы, с сортировкой:


https://foren.germany.ru/programmer/f/39534706.html#Post39...

Fragen und Antworten - Программируем калькулятор пособий для беженцев вместе.
alex445 коренной житель06.10.22 02:33
NEW 06.10.22 02:33 
in Antwort Murr 05.10.22 16:51

И так - по всем 200+ полям на форме...

А когда осилишь - тебе еще с полсотни связанных таблиц кинут...

И так - с каждой формой.

Формы, где в каждой по полста связанных таблиц? - Неудивительно, что юзеры делают ошибки и не могут нормально заполнить такую форму. Надо 200 таблиц делать, чтобы наверняка!


Для полей вида "введите число" или "введите строку" можно, наверное, сделать простую подсказку (не всплывающую, а сразу возле лейбла) типа диапазона вводимых чисел или длину строки со списком исключённых символов?

alex445 коренной житель06.10.22 02:36
NEW 06.10.22 02:36 
in Antwort Murr 05.10.22 17:21

Вылезла следующая валидация:


There is an error with this candidate:
Missing required field:

Поди, сообщение где-то в конце формы - типа, все сообщения валидации пишутся не напротив конкретного поля, а где-нибудь обособленно, на уровне формы. Тоже так себе подход.


Вы сейчас описываете банальные баги. Причём тут мой подход и баги вообще? Такие баги могут быть при любом подходе. Это не дискредитирует конкретно мой подход.

alex445 коренной житель06.10.22 02:49
NEW 06.10.22 02:49 
in Antwort 7495 05.10.22 21:24

А теперь представим, ненапряжённую ситуацию, когда люди приходят добровольно, например рекламную акция - регистрация...

компания вбухивает мильёны денег в рекламу, проводит кучу праздников, - а люди почему то на странице не регистрируются???

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

и никаких ошибок система не выдаёт, логи не ведёт, МЕТРИКИ самое главное в этом бардаке тоже нет, чтоб исправить ошибку!

Гораздо круче, когда логов и метрик - вагон и тележка, но разобраться и понять из этого всё равно ничего нельзя. Зато диски логами забиты. Ну ты их конечно подчищаешь, убивая предыдущую статистику и всю суть подробного логирования...

MrSanders коренной житель06.10.22 09:59
NEW 06.10.22 09:59 
in Antwort alex445 06.10.22 02:49
но разобраться и понять из этого всё равно ничего нельзя

Неправильная формулировка. Если ты не можешь ничего понять, не значит что "разобраться и понять" нельзя.

7495 свой человек07.10.22 22:04
7495
NEW 07.10.22 22:04 
in Antwort alex445 06.10.22 02:49
когда логов и метрик - вагон и тележка, но разобраться и понять из этого всё равно ничего нельзя. Зато диски логами забиты. Ну ты их конечно подчищаешь, убивая предыдущую статистику и всю суть подробного логирования.


Ты за место на дисках не переживай, подключат ещё несколько штук или даже несколько шкафов. Информация и есть конечный продукт, за это платят деньги.


А вот анализ ошибок и всего остального могут не в ручном режиме, а специальными инструментами проводить, могут даже нейронную сеть задействовать, не?

Fragen und Antworten - Программируем калькулятор пособий для беженцев вместе.
alex445 коренной житель07.10.22 22:30
NEW 07.10.22 22:30 
in Antwort 7495 07.10.22 22:04
А вот анализ ошибок и всего остального могут не в ручном режиме, а специальными инструментами проводить, могут даже нейронную сеть задействовать, не?

А блокчейн?

7495 свой человек07.10.22 22:38
7495
NEW 07.10.22 22:38 
in Antwort alex445 07.10.22 22:30
А блокчейн?


"Due to the protocol changes of Ethereum: Rinkeby, Ropsten and Kovan test networks may not work as reliably and will be deprecated soon.


The Rinkeby testnet explorer has been discontinued and set to read-only on October 5th, 2022. Please migrate your contracts and deploy new ones on Goerli or Sepolia."


кароче, я в процессе переезда! зло

Fragen und Antworten - Программируем калькулятор пособий для беженцев вместе.
alex445 коренной житель07.10.22 23:12
NEW 07.10.22 23:12 
in Antwort 7495 07.10.22 22:38, Zuletzt geändert 07.10.22 23:15 (alex445)

На другие нарко... тьфу, т.е. в другую область? )) Советую заняться сетевым маркетингом или политикой:


Каждый час в борьбе, каждый день как год -

Слёты, встречи, звонки, рапорта, выступленья.

Нас постоянно окружает народ,

Но мы с честью выходим из окруженья!


- Ну что, молодёжь, о чём мечтаешь?

- Партия, дай порулить?!

7495 свой человек08.10.22 00:37
7495
NEW 08.10.22 00:37 
in Antwort alex445 07.10.22 23:12
в другую область? )) Советую заняться сетевым маркетингом или политикой:


В политику национальность у меня неподходящая, а вот в сетевой маркетинг можно, сейчас уже присматриваюсь...

хочешь стать моим рефералом, подо мной регистрироваться? пообещаю тебе мальдивы майями и нестыдную машину))

Fragen und Antworten - Программируем калькулятор пособий для беженцев вместе.
alex445 коренной житель26.10.22 12:13
NEW 26.10.22 12:13 
in Antwort 7495 08.10.22 00:37, Zuletzt geändert 26.10.22 12:18 (alex445)

Вот сейчас типичный кейс валидации встретил, и какой-то странный. Запросили с сервера таблицу и показали юзеру на клиенте. Естественно, клиенту передали набор данных с айдишниками в БД, но в UI их не показываем - т.е. айди не редактируемый. Юзер хочет удалить одно данное. Что делает старый код, который я переписываю - он берёт айдишник выбранного для удаления элемента, делает запрос в БД - есть ли с таким айдишником объект. Если есть, достаёт этот объект, читает его айдишник и передаёт в запрос на удаление на сервер. Получается, что айдишник, который хранится в наборе данных, показанных клиенту, не используется для отправки на удаление на сервер. Это что-то типа валидации - проверка, есть ли такой айдишник в БД? Типа, на клиенте кто-то подменил набор, переданный изначально с сервера?


По-моему, это чушь и лишние запросы в БД. Если так уж не доверяете клиенту, что считаете, что он может нередактируемый айди подменить, то валидация явно должна быть не через запрос в БД. Просто при попытке удалить несуществующий айди будет исключение на сервере, которое передают клиенту, но смысл делать попытку отдельного запроса и доставания целого объекта, чтобы потом просто считать его айди и передать в запрос на удаление?


А главное, если айди существует, то при его подмене будет просто удалён другой объект. Но с точки зрения текущей валидации это норма... Бред какой-то! Ну и ещё главное - софт работает в закрытом виде на территории предприятия, в интранете, и наружу доступа нет. Подменить нередактируемый айди могут лишь агенты госдепа работники, которые как-то взломали программу. Защита от такого взлома явно не этим тупым запросом с доставанием объекта делается. Остаётся одно - говно- и лапшекод, когда чел, его написавший, сам не понимал, что и зачем там происходит. Тут даже на самописный фреймворк не спишешь, т.к. даже по логике этого фреймворка написанный код делает какую-то лютую дичь.


Говоре же - гении делали. Там весь многосотстрочный говнокод можно на порядок ужать.

AlexNek патриот26.10.22 17:38
AlexNek
NEW 26.10.22 17:38 
in Antwort alex445 26.10.22 12:13
Типа, на клиенте кто-то подменил набор, переданный изначально с сервера?

Проверка лишняя, но понять можно. Пока мы смотрим на данные, другой пользователь может их уже удалить.

Просто, тоже самое может произойти и после валидации. Только временное окно будет меньше.

alex445 коренной житель26.10.22 20:20
NEW 26.10.22 20:20 
in Antwort AlexNek 26.10.22 17:38, Zuletzt geändert 26.10.22 20:28 (alex445)

Да я не против, чтобы другой удалил. Но тогда будет исключение фреймворка, работающего с БД - его и будем обрабатывать и показывать - типа объекта в БД нет. Мне непонятно, почему автор кода пытается вытащить полноценный объект из БД, а потом прочитать его айдишник и затем по этому айдишнику удалить. Лишняя операция. Объект могут удалить между его чтением и его удалением по его айдишнику - и опять будет та же ошибка - по такому айди объекта нет. Смысла делать промежуточный запрос нет.

AlexNek патриот26.10.22 20:26
AlexNek
NEW 26.10.22 20:26 
in Antwort alex445 26.10.22 20:20
БД - его и будем обрабатывать и показывать

Угу


почему автор кода пытается вытащить полноценный объект из БД

А как интересно он его пытается вытащить?

alex445 коренной житель26.10.22 20:32
NEW 26.10.22 20:32 
in Antwort AlexNek 26.10.22 20:26, Zuletzt geändert 26.10.22 20:36 (alex445)
А как интересно он его пытается вытащить?

Я же говорил - из готового списка объектов в гуе, в котором хранится в том числе айди этого объекта в БД, берётся выбранный для удаления объект, читается его айди, по этому айди вытаскивается этот же объект из БД, читается айди вытащенного, даётся команда на удаление объекта по этому айди. А чё только два раза? Можно же было в цикле раз десять повытаскивать и посчитывать, и только потом удалить?


На проверку наличия перед удалением, как я сказал, не похоже - удалить могут в процессе проверки, т.к. она происходит в серверной части приложения, а не в самой БД. Да и в самой БД это явно не атомарная операция. И смысла в такой проверке нет, т.к. всё и так в трай-кэтч завёрнуто, так что ошибка ненахождения по айди при удалении такая же, как ненахождения по айди при запросе объекта.

AlexNek патриот26.10.22 21:49
AlexNek
NEW 26.10.22 21:49 
in Antwort alex445 26.10.22 20:32
по этому айди вытаскивается этот же объект из БД, читается айди вытащенного

Да странно. А какое сообщение выводится если id не найдено?

Программист коренной житель27.10.22 08:06
NEW 27.10.22 08:06 
in Antwort alex445 26.10.22 12:13
Что делает старый код, который я переписываю - он берёт айдишник выбранного для удаления элемента, делает запрос в БД - есть ли с таким айдишником объект. Если есть, достаёт этот объект, читает его айдишник и передаёт в запрос на удаление на сервер. Получается, что айдишник, который хранится в наборе данных, показанных клиенту, не используется для отправки на удаление на сервер. Это что-то типа валидации - проверка, есть ли такой айдишник в БД?

Я бы сказал, что это не валидация, а оптимизация.

Подозреваю, что DELETE - довольно медленная операция (как минимум из-за того, что на время удаления надо блокировать БД), поэтому для того, чтобы снизить нагрузку на БД решили встроить дополнительную проверку и удалять только те строки, которые реально существуют.


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


Возможно также этот код был написан для какой-нибудь старой версии БД, в которой была проблема с удалением несуществующих ключей.

alex445 коренной житель27.10.22 14:00
NEW 27.10.22 14:00 
in Antwort Программист 27.10.22 08:06, Zuletzt geändert 27.10.22 14:01 (alex445)

Написано было для старой версии, но MS SQL Server. Далее, удаляются юзеры - для них явно скоростного и частого удаления не требуется.


Какая ошибка - не знаю, не пробовал пока юзеров удалять.


Да там всё проще, похоже. Я думаю, как и всё в этом древнючем приложении, тут не только "гении" чудили, но и код через десятые руки прошёл, где каждый подшаманил что-то своё, не сильно вникая. "Работает же? - Работает... А то, что через задницу - не моё дело, у меня на таску 15 минут." Что-то типа такого, наверное.

1 2 3 4 5 6 7 8 9 alle