Понедельник, 22 Января 2018 г. 19:45
+ в цитатник
В прошлый раз я разобрал два примера (
раз,
два), как можно перейти от императивной валидации входных значений к декларативной. Второй пример действительно «слишком много знает» про аспекты хранения и имеет подводные камни (
раз,
два). Альтернатива – разбить валидацию на 3 части:
- Модел байндинг: ожидали
int
, пришел string
– возвращаем 400
- Валидация значений: поле email, должно быть в формате
your@mail.com
, а пришло 123Petya
– возвращаем 422
- Валидация бизнес-правил: ожидали что корзина пользователя активна, а она в архиве. Возвращаем 422
К сожалению стандартный механизм байндинга ASP.NET MVC не различает ошибки несоответствия типа (получили string
вместо int
) и валидаци, поэтому если вы хотите различать 400 и 422 коды ответа, то придется это сделать самостоятельно. Но речь не об этом.
Как слой бизнес-логики может вернуть в контроллер сообщение об ошибке?
Самый распространенный по мнению Хабра способ (
раз,
два,
три) – выбросить исключение. Таким образом между понятием «ошибка» и «исключение» ставится знак равно. Причем «ошибка» трактуется в широком смысле слова: это не только валидация, но и проверка прав доступа и бизнес-правил. Так ли это? Является ли любая ошибка «исключительной ситуацией»? Если вы когда-нибудь сталкивались с бухгалтерским или налоговым учетом, то наверняка знаете, что существует специальный термин «корректировка». Он означает, что в прошлом отчетном периоде были поданы неверные сведения и их необходимо исправить. То есть в сфере учета, без которой бизнес не может существовать в принципе, ошибки – объекты первого класса. Для них введены специальные термины. Можно ли назвать их исключительными ситуациями? Нет. Это нормальное поведение. Люди ошибаются. Программисты — просто чересчур оптимистичный народ. Мы просто никогда не снимаем розовых очков.
Читать статью полностью желаешь
https://habrahabr.ru/post/347284/
Метки:
author marshinov
функциональное программирование
разработка веб-сайтов
проектирование и рефакторинг
.net
either monad
functional design
exceptions
failure
-
Запись понравилась
-
0
Процитировали
-
0
Сохранили
-