Size: a a a

Saint P Ruby Community

2020 January 28

AD

Anton Davydov in Saint P Ruby Community
Ruslan Ryabov
давай приведу пример, допустим у тебя сервис А вызывает Б  и тот вызывает Д, у тебя произошло “событие” по которому тебе нужно выйти из всех сразу, у тебя плодится ретунт в Д, Б и А, на этот случай, которые прокидывают какой-то стейт или еще что-то

а експешен выйдет сразу из 3х + если тебе надо, на каждом из уровней ты можешь его обработать, тот же retry запустить если необходимо
вообще легко такие штуки решаются с ду нотацией. каждый вызов сервиса - отдельный шаг, который возвращает failure результат. как сервис Д вернул failure, так все остальные вернут ошибку
источник

RR

Ruslan Ryabov in Saint P Ruby Community
когда весь проект на экспешенах работает и это даже ожидается, что если где-то выполнится условие, что нам нужно выбросить экспшен, это норма
источник

AD

Anton Davydov in Saint P Ruby Community
Nikita Shilnikov
все верно
ты еще больше запутал, ахах
источник

NS

Nikita Shilnikov in Saint P Ruby Community
Anton Davydov
ты еще больше запутал, ахах
все просто, читаем умные книжки, пробуем на практике, учимся
источник

AD

Anton Davydov in Saint P Ruby Community
Ruslan Ryabov
сомнительно, монады наше легаси в полный ад превратят
и так остался миллион мест, где через цепочку классов проходят хеши с указанием состояния
ты помни, что монады только инструмент. для того, что бы взять инструмент нужно им еще пользоваться так как предпологается. еще раз повторюсь, это как проблема написания тестов для логики, если тест пишется долго и больно - это уже звонок, что что-то в логике не то
источник

AD

Anton Davydov in Saint P Ruby Community
Nikita Shilnikov
все просто, читаем умные книжки, пробуем на практике, учимся
еще бы время на это найти 🙁
источник

IM

Igor Morozov in Saint P Ruby Community
Anton Davydov
еще бы время на это найти 🙁
а ты удалённо работаешь что ли? вот давай в офис, и по пути на работу читай
источник

RR

Ruslan Ryabov in Saint P Ruby Community
Anton Davydov
ты помни, что монады только инструмент. для того, что бы взять инструмент нужно им еще пользоваться так как предпологается. еще раз повторюсь, это как проблема написания тестов для логики, если тест пишется долго и больно - это уже звонок, что что-то в логике не то
ну смотря о каких тестах идет речь, если обычные юниты, то да, если он пишется долго, то что-то там не так, а если это н2н, то там как не все так просто)
источник

AG

Alex G in Saint P Ruby Community
кстати, у дочки в школе есть урок [ТРИЗ] (https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B5%D1%82%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87)

Они там упражняются в придумывании контр-примеров.
Дождь - это хорошо, потому что можно сидеть дома и пить горячий чай.
Но пить горячий чай это плохо, можно обжечься.
Но обжечься это хорошо, потому что можно не делать письменные уроки
Но не делать уроки плохо, потому что ...

Надо попробовать применить к техническим спорам :)
источник

AD

Anton Davydov in Saint P Ruby Community
Igor Morozov
а ты удалённо работаешь что ли? вот давай в офис, и по пути на работу читай
ну, я кроме работы еще кучей всего занимаюсь, так что сложно
источник

K

Kirill in Saint P Ruby Community
Ruslan Ryabov
нет, в контроллере как обычно есть rescue_from у которого описана презентация исключений, как их вернуть клиенту, внутри кода, обрабатываются чаще всего только конкретные классы исключений

все классы унаследаны от BaseAppError, а под нужные случае создается отдельный класс, с своим кодом. К примеру та же валидация, построена на ексепшенах
вот что то подобное я вижу в голове, чтобы использовать, но меня волнует как глубоко я могу этот BaseAppError пробросить, как ребята писали кейс с сервисами А, Б и Д вот если мне надо обработать все события в Д сегодня в одном ключе, а завтра бизнес потребует в этой точке изменений, чтобы я их сделал в одном месте и не занимался такой фигней как статические фиксации в коде - t(api.errors.....сиди вспоминай кто отвечает за этот кусок)
источник

NS

Nikita Shilnikov in Saint P Ruby Community
Anton Davydov
еще бы время на это найти 🙁
так это ж классика
источник

AD

Anton Davydov in Saint P Ruby Community
Alex G
кстати, у дочки в школе есть урок [ТРИЗ] (https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B5%D1%82%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87)

Они там упражняются в придумывании контр-примеров.
Дождь - это хорошо, потому что можно сидеть дома и пить горячий чай.
Но пить горячий чай это плохо, можно обжечься.
Но обжечься это хорошо, потому что можно не делать письменные уроки
Но не делать уроки плохо, потому что ...

Надо попробовать применить к техническим спорам :)
интересно, думаю из этого может что-то получиться даже
источник

NS

Nikita Shilnikov in Saint P Ruby Community
источник

AD

Anton Davydov in Saint P Ruby Community
источник

NS

Nikita Shilnikov in Saint P Ruby Community
вот слева у меня в одной руке монада, в другой — эффект
источник

RR

Ruslan Ryabov in Saint P Ruby Community
Kirill
вот что то подобное я вижу в голове, чтобы использовать, но меня волнует как глубоко я могу этот BaseAppError пробросить, как ребята писали кейс с сервисами А, Б и Д вот если мне надо обработать все события в Д сегодня в одном ключе, а завтра бизнес потребует в этой точке изменений, чтобы я их сделал в одном месте и не занимался такой фигней как статические фиксации в коде - t(api.errors.....сиди вспоминай кто отвечает за этот кусок)
смотря что тебе нужно обработать, у нас например АПИ, чаще всего ошибку нужно вернуть внешнему клиенту, логика как сформировать респонс находится в 1 месте

в коде (сервисах) ошибки перехватываются только если этот случай нужно отдельно обработать, если на нем не нужно прерывать процесс
источник

K

Kirill in Saint P Ruby Community
rescue_from(*UNAUTHORIZED_ERROR_CLASSES) do |exception|
       render json: {
           id: 'unauthorized',
           message: exception.message
       }, status: :unauthorized, layout: nil
     end
источник

AD

Anton Davydov in Saint P Ruby Community
Nikita Shilnikov
вот слева у меня в одной руке монада, в другой — эффект
в левой руке монада, в правой руке эффект,
мой пиар менеджер - драй рб
источник

K

Kirill in Saint P Ruby Community
Ruslan Ryabov
смотря что тебе нужно обработать, у нас например АПИ, чаще всего ошибку нужно вернуть внешнему клиенту, логика как сформировать респонс находится в 1 месте

в коде (сервисах) ошибки перехватываются только если этот случай нужно отдельно обработать, если на нем не нужно прерывать процесс
мы тоже в режиме апи, у нас надо отправить на морду что то в таком виде
источник