Ho una serie di classi che si occupano di alcune attività correlate. Queste attività hanno input e output diversi. Questo fa sì che diventi impossibile avere le attività eseguite tramite codice condiviso senza che questo codice sia una pila di istruzioni if-else che gestiscono tutti i diversi casi.
Ora qualcuno ha refactorizzato questo codice per usare l'ereditarietà - ora c'è una classe base astratta che contiene metodi per ciascuno dei quali è usata da alcune delle classi derivate, per alcune delle quali vengono sovrascritte o annullate e alcune delle quali sono sempre chiamato anche se non sempre applicabile per la classe derivante. Inoltre, l'ereditarietà non viene utilizzata per il polimorfismo, ma solo per il riutilizzo del codice.
Mi sono accasciato un po 'quando ho notato che questo refactoring è stato fatto e che è passato felicemente attraverso la revisione del codice. Il codice base con cui sto lavorando esiste da un po 'ed è pieno di questo genere di cose, e la maggior parte delle persone non capisce i problemi. Sto quindi cercando una buona panoramica sul perché l'ereditarietà non dovrebbe essere sfruttata in questo modo, specialmente con tutti i problemi che provoca.