Sto lavorando a una classe che invia un RequestDTO a un servizio Web. Devo convalidare la richiesta prima che venga inviata.Come ridurre la complessità ciclomatica?
La richiesta può essere inviata da 3 diversi luoghi e ci sono diverse regole di convalida per ciascun "tipo di richiesta", ad es. request1 deve avere nome e numero di telefono, request2 deve avere indirizzo, ecc.)
Ho un DTO che contiene un lungo elenco di campi (nome, indirizzo, città, numero di telefono, ecc.) ed è lo stesso DTO inviato non importa che tipo di richiesta è.
Ho creato 3 diversi metodi di convalida e in base al tipo viene chiamato il metodo appropriato.
In ognuno di questi metodi ho una lunga lista di if-else per controllare i campi che sono necessari per ogni tipo di richiesta.
private void validateRequest1(Request request) {
StringBuilder sb = new StringBuilder();
if (null == request) {
throw new IllegalArgumentException("Request is null");
}
if (isFieldEmpty(request.getName())) { *see below
sb.append("name,"));
}
if (isFieldEmpty(request.getStreet())) {
sb.append("street,"));
}
...
isFieldEmpty()
controlli la stringa per nulla e isEmpty()
e restituisce un valore booleano
Questo mi dà una complessità ciclomatica di 28 in uno di quei metodi così la mia domanda è .. è possibile ridurre questa complessità? - se sì, come potrei fare?
In definitiva ho bisogno di controllare un sacco di campi e non riesco a vedere come questo può essere fatto senza un sacco di controlli:/
La mia idea sarebbe: utilizzare una sorta di oggetto 'FieldChecker' che incapsula il vuoto (o qualche altro) controllo, e l'azione da intraprendere (' sb.append() ') ecc., E scorrere su un elenco di tali oggetti. Ciò rende il codice più chiaro poiché è necessario definire esplicitamente gli output e gli input di tale controllo. – millimoose