Size: a a a

2020 August 07

R

Roman in F# Chat
начинай с дизайна ошибок. Пишешь юнион тип MyDataError = | AlreadyExist | NotFound и тд. Потом ловишь исключения, которые укладываются в один из кейсов, прямо на месте. Остальные ловишь глобально — это баги
источник

ДБ

Дмитрий Башинский... in F# Chat
а use не багует с CE?
а то отладчик так прыгает будто у меня много поточный код, вверх вниз
источник

R

Roman in F# Chat
ну ты в асинк блоке, у тебя асинхронный код. Неудивительно, что отладчик бесится
источник

ДБ

Дмитрий Башинский... in F# Chat
Roman
начинай с дизайна ошибок. Пишешь юнион тип MyDataError = | AlreadyExist | NotFound и тд. Потом ловишь исключения, которые укладываются в один из кейсов, прямо на месте. Остальные ловишь глобально — это баги
я в начале так и сделал у меня были ошибки селениума, ошибки каптчи, но на уровень выше где юзал и то и то приходится их явно сводить к одному типу
источник

ДБ

Дмитрий Башинский... in F# Chat
Roman
ну ты в асинк блоке, у тебя асинхронный код. Неудивительно, что отладчик бесится
в result тоже
источник

R

Roman in F# Chat
ну, у отладчика есть проблемы с СЕ, это факт, к сожалению. Но дело тут не в use, это глобальная беда
источник

R

Roman in F# Chat
Дмитрий Башинский
я в начале так и сделал у меня были ошибки селениума, ошибки каптчи, но на уровень выше где юзал и то и то приходится их явно сводить к одному типу
и это правильно. Это и есть твоч доменная логика, которая явно прописана в коде
источник

ДБ

Дмитрий Башинский... in F# Chat
type AppError = 
   | Warn of string
   | Crit of string
   | Exn of exn

я сразу вывел 1 тип чтоб не кастить на других слоях, он не кокретный конечно, но он мне дает понимание что произошло примерно, если Crit то я даже retry делать не буду
источник

R

Roman in F# Chat
Дмитрий Башинский
type AppError = 
   | Warn of string
   | Crit of string
   | Exn of exn

я сразу вывел 1 тип чтоб не кастить на других слоях, он не кокретный конечно, но он мне дает понимание что произошло примерно, если Crit то я даже retry делать не буду
это в лучшем случае тянет на самую верхнеуровневую ошибку, и то не факт. Она слишком гибкая
источник

R

Roman in F# Chat
покрывать такую ошибку тестами довольно заебно
источник

R

Roman in F# Chat
твои ошибки — это контракт твоих функций. при переходе из одного слоя в другой их приходится мапить, но это в любом слусае приходится делать. И с точки зрения чтения и поддержки кода, лучше это делать сразу на месте, а не в глобальном фильтре исключений
источник

ДБ

Дмитрий Башинский... in F# Chat
щас я верну ситуацию которую я показывал пару дней назад, может ты с ней встречался
источник

ДБ

Дмитрий Башинский... in F# Chat
вот я конкретизировал ошибки
источник

ДБ

Дмитрий Башинский... in F# Chat
источник

ДБ

Дмитрий Башинский... in F# Chat
вот все четко как я люблю
источник

ДБ

Дмитрий Башинский... in F# Chat
источник

DL

Danil Lazarev in F# Chat
Что нужно прочитать про шарпы, чтобы узнать, почему вот такая ошибка лечится с помощью  изменения сигнатуры на FromNullable<'newType when 'newType:null>?  )
источник

ДБ

Дмитрий Башинский... in F# Chat
источник

ДБ

Дмитрий Башинский... in F# Chat
@atsapura и вот это уже не выглядит красиво
источник

ДБ

Дмитрий Башинский... in F# Chat
приходится в местах где все обьеденяется маппить ошибки в что то общее
источник