Codice di refactoring dipendente dalla classe esterna

1

Ho una classe simile a ServletFilter che ha più validazioni sulla richiesta di input

class TokenHandler implements SomeHandler{
  Response handle(Request request){
    if(paramXMissing(request)){
       return new Response(); // empty response
    }
    if(paramYGreaterThan100(Request request)){
       return new Response(); // empty response
    }
   //some more similar validation on request


  }
}
Il parametro

request può essere un'istanza di qualsiasi sottotipo di Request . Poiché la maggior parte dei metodi di convalida dipendono da Request anziché dal gestore, sembra più simile all'emodore di caratteristica dell'invidia . Se Request fosse stato un oggetto di dominio normale avrei solo metodo spostato in quella classe. Ma in questo caso, come faccio a refactoring questo codice ( metodo lungo )? Non sono sicuro che l'introduzione di una nuova classe Validator sarebbe una scelta giusta.

Modifica

Non ho solo la convalida, ma anche l'elaborazione aggiuntiva sull'oggetto richiesta, ad esempio, rimuovo determinati parametri dalla stringa di query.

In realtà penso che l'introduzione di nuove classi per ogni specifica sarebbe eccessiva. È veramente richiesto? Qualche altra alternativa?

    
posta sidgate 17.05.2017 - 19:09
fonte

1 risposta

2

Creerei un'interfaccia per il Validator e creerò un elenco di oggetti Vatidator specializzati:

 class TokenHandler implements SomeHandler{
   interface Validator{
     boolean isInvalid(Request request);
  }
  private final List<Validator> validators = Arrays.asList(
      (Validator)request->paramXMissing(request), 
      (Validator)request->paramYGreaterThan100(request),
      // Checks could also be implemented as separate classes or enum... 
    );

  Response handle(Request request){
    for(Validator validator : validators){
      if(validator.isInvalid(request)){
         return new Response(); // empty response
      }
    }
    // continue for valid response
  }
}
    
risposta data 17.05.2017 - 20:55
fonte

Leggi altre domande sui tag