подход результирующих объектов клевый и мы его используем в проекте, но у меня всегда возникали вопросы как его правильно готовить)
в таком подходе есть след проблема: все разрабочитки используют очень много стороннего кода, в котором невозможно контролировать использование эксепшенов.
и я вижу только три варианта, которые все мне не нравятся: либо не отлавливать, что мы не можем обработать, и тогда у нас получается какое-то двоевластие, либо не использовать сторонний код, использующий исключения, что кажется невозможным, либо обрабатывать все исключения при каждом вызове стороннего кода, что несет в себе бойлерплейт.
также непонятно как правильно в последнем варианте логировать или отображать разработчику ошибки, которые мы не можем обработать.
кажется логичным обрабатывать такие в единой точке в базовом контроллере и джобе, но нам нужна информация где была поймана эта ошибка, значит нужно либо передавать в Failure уникальные значения, обозначающие ошибки, что кажется невыполнимым, либо передавать бэктрейс в Failure, что добавит еще бойлерплейт и кажется переизобретением эксепшенов, либо в Failure передавать эксепшен, что не кажется идиоматическим.