Ich arbeite an einer Klasse, die ein RequestDTO an einen Webdienst sendet. Ich muss die Anfrage validieren, bevor sie gesendet wird.Wie kann die zyklomatische Komplexität reduziert werden?
Die Anfrage kann von 3 verschiedenen Orten gesendet werden und es gibt verschiedene Validierungsregeln für jeden "Anfragetyp", z. request1 muss name und phonenumber haben, request2 muss adresse haben, etc)
Ich habe eine DTO, die eine lange Liste von Feldern (Name, Adresse, Stadt, Telefonnummer, etc.) enthält und es ist die gleiche DTO gesendet egal welche Art von Anfrage ist es?
Ich habe 3 verschiedene Validierungsmethoden erstellt und basierend auf dem Typ die entsprechende Methode aufgerufen.
In jeder dieser Methoden habe ich eine lange Liste von if-else, um nach den Feldern zu suchen, die für jeden Anforderungstyp erforderlich sind.
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()
prüft die Zeichenfolge für null und isEmpty()
und gibt einen Booleschen
Das gibt mir eine zyklomatische Komplexität von 28 in einer dieser Methoden so meine Frage .. ist es möglich, diese Komplexität zu reduzieren? - Wenn ja, wie würde ich dies tun?
Letztlich muss ich eine Menge Felder überprüfen, und ich kann nicht sehen, wie dies ohne viele Kontrollen durchgeführt werden kann:/
Meine Idee wäre: Verwenden Sie eine Art von 'FieldChecker'-Objekt, das die Leere (oder eine andere) Prüfung einkapselt, und die Aktion (' sb.append() ') etc, und Schleife über eine Liste von solche Objekte. Dies macht den Code klarer, da Sie die Ausgaben und Eingaben dieser Prüfung explizit definieren müssen. – millimoose