Во-первых, я должен указать на тот факт, что CustomException
это не распространяется, Exception
поэтому это не совсем так Exception
.
Это говорит:
Если вам не важен принцип инверсии зависимости , оставьте его как есть. Это совершенно нормально для интерфейса , чтобы зависеть от классов конкретных, например , многие интерфейсы зависят от String
или Object
которые являются конкретными классами . Дело в том, что мы склонны полагать, что классы, принадлежащие Java SDK, более стабильны (менее подвержены изменениям, нарушающим код), чем те, которые мы пишем.
С другой стороны:
Если вы хотите следовать DIP (который имеет бесчисленные преимущества и является моей рекомендацией), то вы должны сделать одну из двух вещей:
Опция 1
- Сделать
CustomException
аннотацию
- Держи
void onError(CustomException ex)
как есть
Вариант 2
- Сделать
CustomException
интерфейс
- Держи
void onError(CustomException ex)
как есть
С любой из этих опций вы будете соответствовать DIP, так как интерфейс не будет зависеть от какого-либо конкретного класса, только от абстракций.
При непосредственном применении инверсии зависимостей рефераты принадлежат верхним уровням / уровням политики. Эта архитектура группирует компоненты верхнего уровня / политики и рефераты, которые определяют низшие сервисы вместе в одном пакете. Уровни более низкого уровня создаются путем наследования / реализации этих абстрактных классов или интерфейсов . Мартин, Роберт С. (2003).
- Agile Software Development, Принципы,> Шаблоны и Практики. Прентис Холл. С. 127–131. ISBN 978-0135974445.