Supponiamo di avere due o più implementazioni UserControl
con implementazioni molto diverse ma quasi identiche a code-behind. Una strategia per evitare la duplicazione del codice è la seguente:
- Cambia ogni
UserControl
per ereditare da una nuova classe astratta,AwesomeUserControl
- Sposta tutto il codebehind da ogni
UserControl
aAwesomeUserControl
(AwesomeUserControl
non ha un file ascx). - Aggiungi getter astratti a
AwesomeUserControl
per qualsiasi controllo dal file ascx degli UserControls originali. - Implementa questi getter in ogni
UserControl
.
Questa strategia funziona estremamente bene ed è facile da mantenere. Tuttavia, introduce anche codice stupido di scaffolding; ogni nuova implementazione di AwesomeUserControl
ha un gruppo di getter per agganciare AwesomeUserControl
agli elementi dell'interfaccia utente all'interno del nuovo controllo. Ogni volta che mi ritrovo a utilizzare una strategia che richiede codice di ponteggio incollato alla copia, mi preoccupo di fare qualcosa di sbagliato. Anche se ha un bell'effetto di non riuscire a compilare se mancano gli elementi dell'interfaccia utente (al contrario di saltare il codice dello scaffolding a favore della riflessione e della denominazione richiesta).
Questo uso dell'ereditarietà è ragionevole?