Attualmente sto cercando di capire SOLID. Quindi il principio di inversione delle dipendenze significa che qualsiasi due classi dovrebbe comunicare tramite interfacce, non direttamente. Esempio: se class A
ha un metodo, che si aspetta 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.
A condizione di averlo capito correttamente, la mia domanda sarebbe è una buona pratica applicarla a interazioni di classe all o dovrei provare a pensare in termini di livelli ?
Il motivo per cui sono scettico è perché paghiamo un prezzo per seguire questo principio. Ad esempio, devo implementare la funzione Z
. Dopo l'analisi, concludo che la funzione Z
è composta da funzionalità A
, B
e C
. Creo una facciata classe Z
, che, attraverso le interfacce, utilizza le classi A
, B
e C
. Comincio a codificare l'implementazione e ad un certo punto mi rendo conto che l'attività Z
è in realtà costituita da funzionalità A
, B
e D
. Ora ho bisogno di scartare l'interfaccia C
, il prototipo di classe C
e scrivere l'interfaccia e la classe D
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 accoppiata direttamente con Python, avrei bisogno di cambiare solo l'implementazione.