По-перше, я повинен зазначити той факт, CustomException
який не поширюється, Exception
тому він насправді не є Exception
.
Це сказав:
Якщо ви не переймаєтесь принципом інверсії залежності , залиште його таким, яким він є. Це абсолютно нормально для інтерфейсу , щоб залежати від класів конкретних, наприклад , багато інтерфейси залежать від String
або Object
які є конкретними класами . Вся справа в тому, що ми схильні вважати, що класи, які належать до Java SDK, є більш стійкими (менш схильні до змін коду), ніж ті, що ми пишемо.
В іншій руці:
Якщо ви хочете слідувати DIP (який має незліченну кількість переваг і є моєю рекомендацією), тоді вам потрібно зробити одну з двох речей:
Варіант 1
- Зробіть
CustomException
абстрактним
- Тримайте
void onError(CustomException ex)
як є
Варіант 2
- Зробіть
CustomException
інтерфейс
- Тримайте
void onError(CustomException ex)
як є
З будь-яким із цих варіантів ви б відповідали DIP, оскільки інтерфейс не залежав би від конкретного класу, а лише від абстракцій.
При прямому застосуванні інверсії залежності абстракції належать верхнім / політичним шарам. Ця архітектура групує вищі компоненти / політики та конспекти, які визначають нижчі служби разом у одному пакеті. Шари нижчого рівня створюються успадкуванням / реалізацією цих абстрактних класів або інтерфейсів . Мартін, Роберт К. (2003).
- Agile Розробка програмного забезпечення, Принципи,> Шаблони та практики. Prentice Hall. С. 127–131. ISBN 978-0135974445.