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 A
ma 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 Z
składa się z funkcjonalnością A
, B
a C
. Tworzę fasady klasa Z
, że poprzez interfejsy, wykorzystuje klas A
, B
i C
. Zaczynam kodowanie wdrażanie i w pewnym momencie sprawę, że zadanie Z
faktycznie składa się z funkcjonalnością A
, B
a D
. Teraz muszę usunąć C
interfejs, C
prototyp klasy i napisać osobny D
interfejs 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ę.