На даний момент я намагаюся розібратися з твердим. Отже, Принцип інверсії залежності означає, що будь-які два класи повинні спілкуватися через інтерфейси, а не безпосередньо. Приклад: Якщо 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, безпосередньо пов'язаному з реалізацією, мені потрібно змінити лише реалізацію.