Attualmente sto cercando di capire SOLID. Quindi il principio di inversione di dipendenza significa che due classi dovrebbero comunicare tramite interfacce, non direttamente. Esempio: se class A
ha un metodo, che prevede un puntatore a un oggetto di tipo class B
, allora questo metodo dovrebbe effettivamente aspettarsi un oggetto di tipo abstract base class of B
. Questo è utile anche per Apri / Chiudi.
Se ho capito bene, la mia domanda sarebbe: è una buona pratica applicarla a tutte le interazioni di classe o dovrei provare a pensare in termini di livelli ?
Il motivo per cui sono scettico è perché stiamo pagando un prezzo per seguire questo principio. Di ', devo implementare funzionalità Z
. Dopo l'analisi, concludo che caratteristica Z
consiste di funzionalità A
, B
e C
. Creo una facciata di classe Z
, che, attraverso le interfacce, utilizza le classi A
, B
e C
. Comincio codifica l'attuazione e ad un certo punto mi rendo conto che il compito Z
in realtà consiste di funzionalità A
, B
e D
. Ora ho bisogno di cancellare l' C
interfaccia, il C
prototipo di classe e scrivere D
un'interfaccia e una classe separate . Senza interfacce, solo la classe avrebbe dovuto essere sostituita.
In altre parole, per cambiare qualcosa, devo cambiare 1. il chiamante 2. l'interfaccia 3. la dichiarazione 4. l'implementazione. In un'implementazione direttamente accoppiata a Python, avrei bisogno di cambiare solo l'implementazione.