Ho fatto il codice per circa 8 anni, tuttavia trovo che l'ereditarietà sia troppo flessibile e talvolta ti confonde totalmente con il codice che hai scritto. Un esempio più semplice potrebbe essere:
abstract class AClass {
protected void method1() {
if(check()) {
do1();
} else {
do2();
}
}
protected abstract void do1();
protected abstract void do2();
}
L'intenzione della classe è che le persone possano implementare do1 () e do2 () in modo che possa essere fatta qualche ulteriore logica, tuttavia a volte le persone decidono di sovraccaricare method1 (), e quindi le cose si complicano immediatamente.
Trovo solo nel modello di strategia, il codice viene riutilizzato bene attraverso l'ereditarietà, nella maggior parte dei casi il progettista della classe base conosce molto bene le sue sottoclassi e quell'eredità è totalmente opzionale.
Ho una classe che è ereditata da 4 classi - una IoHandler, ed è sottoclassi per lato server, lato client, server periferico, server di origine, e inizia a farmi impazzire. Sono sempre stato nel refactoring del codice, sono sempre uscito con idee che penso avrebbero funzionato e quindi non sono state provate. Si dice che il cervello umano possa contenere solo 7 informazioni una volta, ne porto troppe?