7 votes

Problème de conception - L'héritage est-il le bon moyen de simplifier ce code ?

J'ai un problème de conception que j'aimerais résoudre. J'ai une interface, appelons-la IProtocol qui est mis en œuvre par deux classes distinctes. Il s'agit de plus de 600 lignes de code. La grande majorité des choses qu'ils font sont les mêmes, sauf pour certains domaines spécifiques, comme DiffStuff();

La structure actuelle ressemble à ceci :

public class Protocol1 : IProtocol
{
  MyInterfaceMethod1()
  {
     Same1();
     DiffStuff();
     Same2();
  }
}

Et

public class Protocol2 : IProtocol
{
  MyInterfaceMethod1()
  {
     Same1();
     Same2();
  }
}

Je crains d'avoir des erreurs de copier-coller et le problème classique de duplication du code si je garde les deux protocoles séparés. Nous parlons de 600 lignes de code chacune, et non de simples méthodes.

J'envisage de modifier l'implémentation de Protocol1 pour qu'il hérite de Protocol2, comme ceci (Protocol2 resterait en grande partie le même, sauf que je devrais envelopper Same1() y Same2() en méthodes privées).

public class Protocol1 : Protocol2
{
  void Same1()
  {
     base.Same1();
  }

  void Same2()
  {
     base.Same2();
  }

  MyInterfaceMethod1()
  {
     Same1();
     DiffStuff();
     Same2();
  }
}  

Est-ce la bonne façon d'aborder ce problème ?

Edita: De nombreuses personnes m'ont aidé à répondre à cette question, merci de m'avoir bien compris. Dans mon cas, les deux objets ne sont pas du même type, même si une grande partie de leur implémentation est partagée. La suggestion de Bobby d'utiliser une classe de base abstraite, en créant de petites méthodes pour encapsuler les changements entre les classes. Remerciements supplémentaires à :

  • jloubert
  • Hans Passant
  • Jeff Sternal

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X