Ho imparato qualche tempo fa che le classi astratte dovrebbero sempre astrarre le loro funzioni in un'interfaccia. Quindi, invece di avere qualcosa di simile -
abstract class a{
public int i;
public int foo();
}
class b : a{
public int foo(){return 42;}
}
abbiamo qualcosa di simile -
interface Ia{
public int foo();
}
abstract class a : Ia{
public int i;
}
class b : a{
public int foo(){return 42;}
}
Dal mio punto di vista, questo è migliore a causa della singola responsabilità, modularità e manutenibilità. Tuttavia, il mio collega non è d'accordo, e afferma che non vi è alcun vantaggio percepibile a questo e che non fa che aumentare la complessità. Ho provato a trovare alcuni scritti su questo argomento, ma non ricordo il nome del pattern e il mio googling non ha trasformato nulla.
Questo modello è una cosa reale? Avevo ragione ad astrarre tutto il più possibile, o è corretto il mio collega?