Duplication de code

Duplication de code - Java - Programmation

Marsh Posté le 17-03-2008 à 19:48:56    

Bonjour,
 
On me demande de dupliquer une fonction pour avoir le comportement suivant :
- Sous certaines conditions, lever une exception
- Sous les même conditions, continuer le traitement
J'aurai donc une fonction f et une fonction fbis que j'appellerais et qui seraient strictement semblables concernant le traitement, à part que justement si j'appelle f elle doit s'arrêter dans certaines conditions, et si j'appelle fbis, dans les mêmes conditions elle doit continuer.
 
Je ne suis évidemment pas d'accord avec cette solution, car elle implique une maintenabilité beaucoup trop risquée (ce sont des fonctions pas piquées des hannetons en plus)
Le problème que j'ai est que je ne peux pas modifier les paramètres (les interfaces ne sont pas modifiables), donc pas rajouter un booléen dans ma fonction.
Je ne peux pas non plus "vider" f et la laisser de coté, car elle peut être appelée directement par du code sur lequel je n'ai aucun accès. De toute façon cette solution ne serait pas très élégante.
 
Je n'arrive pas à trouver le montage qui me permettrait d'avoir une solution élégante et sans risque.
 
Merci d'avance ...
 

Reply

Marsh Posté le 17-03-2008 à 19:48:56   

Reply

Marsh Posté le 17-03-2008 à 20:52:54    

Et si tu fais une sorte de filtre?
 

Code :
  1. public interface Filter
  2. {
  3.      /** Détermine si ton objet est accepté.
  4.        @param anObject l'objet à vérifier.
  5.        @return un booléen.
  6.       */
  7.      boolean isAccepted(Object anObject);
  8. }


 
et:
 

Code :
  1. public class FunctionFilter implements Filter
  2. {
  3.      public FunctionFilter() {
  4.      }
  5.      public boolean isAccepted(Object anObject)
  6.      {
  7.       // ta condition
  8.      }
  9. }


 
Comme ça pas besoin de modifier ta fonction ou ton interface.
 
^^ Bon j'espère que ça t'aidera :D j'débute!

Reply

Marsh Posté le 04-04-2008 à 17:04:03    

Ce que je ferais, serait de mettre quelque part, dans une classe statique ou un singleton, une variable statique de type boolean dans ce genre :

Code :
  1. public final class RunType {
  2.    public static boolean stopOnError = true;
  3. }


Ensuite, dans la fonction incriminée, sans changer son interface, tu fais quelque chose comme ça :

Code :
  1. function toto(String titi) throws Exception {
  2.   try {
  3.     // Ton code ici
  4.   } catch (Exception e) {
  5.      if (RunType.stopOnError) {
  6.         throw e;
  7.      }
  8.   }
  9. }


Quelque chose dans ce genre là devrait répondre à ton problème, non ?


---------------
Un ordinateur sert à résoudre des problèmes qui n'existaient pas avant son invention.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed