2008-12-03 4 views
0

Dans toutes les formes que nous dérivons de FormBaseControl, nous avons le code suivant. Je suis sûr qu'il existe un meilleur moyen de taper l'objet contrôleur que celui-ci, mais pour le moment nous l'avons inclus dans chaque page. Dans l'exemple ci-dessous, base.Controller est de type BaseController, d'où provient ExportController. Je trouve la duplication de ce code dans chaque dérivation de FormBaseControl pour ne pas sentir bon, mais je ne peux pas vraiment trouver une façon de redresser.La duplication ennuyeuse dans les classes dérivées

private ExportController MyController 
    { 
     get { return base.Controller as ExportController; } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     base.Controller = new ExportController(WebNavigator.Current); 

Répondre

1

Ne pouvez-vous pas utiliser une classe générique pour résoudre ce problème?

I.e. au lieu de:

private ExportController MyController 
{ 
     get { return base.Controller as ExportController; } 
} 

dans la classe dérivée.

Put:

protected T MyController 
{ 
     get { return this as T; } 
} 

dans la classe de base, et tournez la classe de base dans une classe générique BaseController<T>

+0

Je ne peux pas changer BaseController pour prendre un paramètre de type générique – ProfK

+0

Ah, vous êtes alors enculés :) OK. Qu'en est-il de l'insertion d'une classe intermédiaire dérivée de BaseController qui prend un générique. Alors les autres classes peuvent en dériver. –

+0

Votre solution semble confondre la base du contrôleur et la base de la page, car MyController sur la page de base doit renvoyer un contrôleur. Si cela retourne ceci, le T va échouer. – ProfK

0

Je pense qu'il y a un problème de conception ici. Etes-vous sûr que MyController est nécessaire pour être ExportControler (ou tout autre) et non la base (ou la classe dérivée)? Une classe intermédiaire, une interface ou des génériques peuvent-ils éviter cela?

Veuillez donner des détails sur les raisons pour lesquelles vous devez redéfinir MyControler tout le temps.

+0

Il peut y avoir un problème de conception, mais je ne suis pas sur le point de redessiner une application avec 13k fichiers source et actuellement déployés pour 5k utilisateurs. : Dans une page d'exportation, j'ai besoin d'accéder à des membres spécifiques à ExportController qui ne sont pas disponibles sur BaseController – ProfK