Постоянно сталкиваюсь с этой проблемой и никак не могу определиться. Является ли плохим решением передача в конструктор исключения дополнительного объекта, к которому потом может получить доступ обработчик исключения?
Например, класс для работы с БД (ORM, конструктор запросов). При выполнении запроса база возвращает ошибку (unknown column), класс генерирует исключение. Хорошо бы иметь возможность в обработчике исключения получить текст запроса (отдельно от текста ошибки). И как это сделать? Удобнее всего расширить исключение, добавив отдельный метод, но является ли этом верным подходом? Можно сохранять последний запрос в объекте для работы с БД, а потом при необходимости читать его оттуда (getLastQuery), но в этом случае функции будут иметь побочный эффект, что тоже как-то не очень хорошо. Это только пример.
Класс исключения из какой-то библиотеки:
https://github.com/vasa-c/go-db/blob/master/goDB/E...
Наследование исключений по-хорошему используется только для создания иерархий исключений, а не для внедрения дополнительной функциональности?
Сначала пошел искать встроенные классы исключений в популярных фреймворках с расширенным конструктором, но потом решил спросить здесь.