Здравствуйте. Зашёл спор со старшим инженером-программистом о создании своих собственных эксепшенов. Он считает, что не стоит их писать, если там не добавляешь никакой новой функциональности (по сути только название меняешь), мол, не нужно плодить лишние сущности. Я в некоторых источниках в сети видел/слышал, что нужно писать свои собственные эксепшены, а не выкидывать класс Exception или выкидывать специфический эксепшн в каком-то другом, левом слое (например, вышестоящем; как пример - выкидывать во view SQLException). Причём это говорили/писали опытные программисты. Сам я тоже согласен с ними. Пока стараюсь делать именно так.
Так как лучше делать? (в плане стиля, а также поддерживаемости и надёжности программы)
если там не добавляешь никакой новой функциональности (по сути только название меняешь), мол, не нужно плодить лишние сущности
Совет сродни экономии на переменных: с таким успехом можно делать трехэтажные цепочки вызовов, по пять вложенных циклов и прочую лабуду, чтобы сущности не плодить. Главное - поддерживать читаемость на необходимом уровне.
Но "читаемость" - понятие субъективное, поэтому даже увидев конкретный код можно только голосованием устанавливать правоту (т.е. для большинства читателей некий вариант был бы более понятным), а уж "на пальцах" никто точно не скажет, как будет лучше, ведь у каждого свои картины в сознании всплывают.
Приведу пример когда я иногда использую свои эксепшены. Есть некий бин который ищет что то в бд, но транзакцией ты управлять по каким-то причинам не можешь. Простого SQL эксепшена мне не достаточно, мне нужно точно знать что с базой. Поэтому я выделяю ошибки попыток коннекта в ResourcesNotAvailableEx, а остальные уже как критичные, когда ты не знаешь состояния системы. И потом уже их обрабатываю, могу менять логику в зависимости от ошибок
Тут нужно смотреть на свой проект.
Чаще всего хватает стандартных Exception, но при использовании собственных библиотек с очень узкой спецификой, стоит обзавестись собственными исключениями.
Как стоит делать?
Исключения стоит всегда отлавливать и никогда не выбрасывать просто так. Программа в исключительной ситуации должна обработать исключение и сообщить пользователю, что возникла ошибка, прервать выполнение кода с ошибкой и перевести пользователя на предыдущий экран или в область, где гарантируется стабильная работа.