In azienda per cui lavoro, continuo a vedere le interfacce di IManager convertite nei loro veri tipi e un sacco di "instanceof / TypeOf" se i controlli delle istruzioni.
Ad esempio:
Gestore IManager // passato al metodo come parametro
if (manager.GetType() == typeof(CustomerManager)) {
customerManager = (CustomerManager) manager;
customers = customerManager.GetCustomers();
groupId = customerManager.GetCustomerGroupID();
// etc...
}
Ho letto il Principio di sostituzione di Liskov e afferma che "I sottotipi devono essere sostituibili al loro tipo di base". Questo sembra violare questo.
I sottotipi hanno le loro funzioni molto specifiche e non sono sicuro su come risolverlo. Questo è un problema che vedo accadere molto quando io stesso sto sviluppando. Trovo difficile da evitare e penso di dover cambiare il modo in cui tratto le interfacce.
Qualcuno ha qualche consiglio SE per evitare problemi comuni come questo?