На даний момент я намагаюся розібратися з твердим. Отже, Принцип інверсії залежності означає, що будь-які два класи повинні спілкуватися через інтерфейси, а не безпосередньо. Приклад: Якщо class Aє метод, який очікує на вказівник на об’єкт типу class B, тоді цей метод повинен очікувати об'єкта типу abstract base class of B. Це допомагає і для Open / Close.
За умови, що я правильно це зрозумів, моє запитання було б, чи це вдала практика застосовувати це до всіх взаємодій класів чи слід намагатися думати з точки зору шарів ?
Я скептично вважаю, що ми платимо певну ціну за наступний принцип. Скажіть, мені потрібно реалізувати функцію Z. Після аналізу, я висновок , що функція Zскладається з функціональних можливостей A, Bі C. Я створити фасад клас Z, який, через інтерфейси, використовує класи A, Bі C. Я починаю кодувати реалізацію і в якийсь момент я розумію, що завдання Zнасправді складається з функціональності A, Bі D. Тепер мені потрібно брухтувати Cінтерфейс, Cпрототип класу та написати окремий Dінтерфейс та клас. Без інтерфейсів потрібно було б замінити лише клас.
Іншими словами, щоб щось змінити, мені потрібно змінити 1. абонент 2. інтерфейс 3. декларація 4. реалізація. У python, безпосередньо пов'язаному з реалізацією, мені потрібно змінити лише реалізацію.