Obecnie próbuję znaleźć SOLID. Zatem zasada inwersji zależności oznacza, że dowolne dwie klasy powinny komunikować się za pośrednictwem interfejsów, a nie bezpośrednio. Przykład: Jeśli class Ama metodę, która oczekuje wskaźnika do obiektu typu class B, wówczas metoda ta powinna faktycznie oczekiwać obiektu typu abstract base class of B. Pomaga to również w otwarciu / zamknięciu.
Pod warunkiem, że dobrze to zrozumiałem, moim pytaniem byłoby, czy dobrą praktyką jest stosowanie tego do wszystkich interakcji klasowych, czy powinienem próbować myśleć w kategoriach warstwowych ?
Sceptycznie podchodzę do tego dlatego, że płacimy pewną cenę za przestrzeganie tej zasady. Powiedz, że muszę zaimplementować funkcję Z. Po analizie wniosku, że funkcja Zskłada się z funkcjonalnością A, Ba C. Tworzę fasady klasa Z, że poprzez interfejsy, wykorzystuje klas A, Bi C. Zaczynam kodowanie wdrażanie i w pewnym momencie sprawę, że zadanie Zfaktycznie składa się z funkcjonalnością A, Ba D. Teraz muszę usunąć Cinterfejs, Cprototyp klasy i napisać osobny Dinterfejs i klasę. Bez interfejsów tylko klasa musiałaby zostać wymieniona.
Innymi słowy, aby coś zmienić, muszę zmienić 1. dzwoniącego 2. interfejs 3. deklarację 4. implementację. W implementacji bezpośrednio sprzężonej z pytonem musiałbym zmienić tylko implementację.