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
UserControlper ereditare da una nuova classe astratta,AwesomeUserControl - Sposta tutto il codebehind da ogni
UserControlaAwesomeUserControl(AwesomeUserControlnon ha un file ascx). - Aggiungi getter astratti a
AwesomeUserControlper 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?