Size: a a a

2021 December 04

NR

Nikita Reshetnik in DotNetRuChat
Вопрос в том, что если модель не корректная приходит, то она превращается в налл, и кидается в базу, проходя все уровни
источник

NR

Nikita Reshetnik in DotNetRuChat
Я хочу проверять на валидность модель то того как она дойдет до уровня базы, и даже не пробовать ее туда пихать
источник

NR

Nikita Reshetnik in DotNetRuChat
Тут не про поля совсем...
источник

ЕМ

Егорка Миллер... in DotNetRuChat
а, ну ладно
источник

OS

Oleg Safonov in DotNetRuChat
проверьте перед записью, проверьте на null и на всё остальное
источник

NR

Nikita Reshetnik in DotNetRuChat
Как вариант, я думал об этом, но првильно так делать, ибо у меня уже заведомо на верхнем уровне понятно что модель не валидная, и пускать ее на мапинг и на уровень сервисов дальше как-то не очень, разве нет?
источник

OS

Oleg Safonov in DotNetRuChat
Низкоуровневый слой не должен надеяться на то, что выше всё проверили
источник

NR

Nikita Reshetnik in DotNetRuChat
Я в таком случае хочу просто аттрибутом проверять модель валидная или нет
источник

NR

Nikita Reshetnik in DotNetRuChat
Даже с проверку на уровне бд
источник

NR

Nikita Reshetnik in DotNetRuChat
что звучит логично, не спорю
источник

OS

Oleg Safonov in DotNetRuChat
Плохая идея
источник

NR

Nikita Reshetnik in DotNetRuChat
Расскажете почему?)
источник

OS

Oleg Safonov in DotNetRuChat
Потому что Вы сейчас получаете null в БД. Если Ваш метод надеется, что выше всё проверили, то вызов этого метода из других частей кода сломает Вам БД
источник

NR

Nikita Reshetnik in DotNetRuChat
Я СОгласен что нужно добавить проверку на нулл перед тем как закидывать что-то в бд, на всякий случай для тем вещей которые я мог не предусмотреть, но чем плохо к этому еще валидировать модель сразу как она пришла на валидность, и если что, не пускать ее дальше, и сразу кидать 400?
источник

OS

Oleg Safonov in DotNetRuChat
Это не плохо. Но это частный кейс, и Вам придётся дублировать проверки однообразные на всех методах. Т.е. впилить проверку наверху нужно, там можно ошибку понятную бросить, но если там что то забыли, то не страшно. А вот для низкоуровневого слоя забыть проверку недопустимо. И не только на null, а на всё. Ну т.е. если Вы в БД ожидаете непустую строку, то будете надеяться, что её уже кто то проверил? А если это условный адрес для перевода денег, будете доверять вызывающему коду?
источник

NR

Nikita Reshetnik in DotNetRuChat
За доверие из вызывающего кода уже согласился, это точно исправлю)
источник

ЕМ

Егорка Миллер... in DotNetRuChat
кароче топ тактика. на свойства модели кидаем аттрибут Required и NotNull (но вроде можно и без него), в контроллере где принимается эта модель пишем типа такого:
if (ModelState.IsValid)
              // если все оке
           else
               // если не все оке
источник

ЕМ

Егорка Миллер... in DotNetRuChat
и все должно работать нормалды, но это не точно
источник

АШ

Алексей Шокарев... in DotNetRuChat
Попробую рассказать как это делается в нормальных рабочих проектах. Во-первых, контроллер должен быть максимально простым. Поэтому валидацию модели лучше делать в сервисе. Очень удобно использовать библиотеку функциональных расширений для C#, тогда и сервис получается очень простым и понятным. Далее, в контроллер обычно уже приходит JSON, поэтому видимо нужно говорить об проверке на валидность не схемы, а непосредственно значений элементов JSON?
источник

NR

Nikita Reshetnik in DotNetRuChat
Да. на счет контроллера, стараюсь как раз придерживаться простоты, и выношу любые проверки из него. Ментор в компании посоветовала проверять то, что мне приходит норм модель в аттрибуте, по этому рыл в ту степь. Но мне уже не один раз сказали за валидацию через Model.IsValid с аннотациями конкретно значений элементов, по этому, да будет так
источник