Try-Catch anstelle von Null Check bei Verwendung mehrerer Getters

8

Mein Problem ist das Folgende, ich habe einen ziemlich langen Getter, d.h.,

%Vor%

Aufgrund des "schlechten" Datenbank- / Entity-Designs (einige Dinge wurden später als andere eingeführt) kommt es vor, dass getObjectB() , getObjectC() oder getObjectD() NULL zurückgeben können.

Normalerweise verwenden wir immer Null-Checks, aber in diesem Fall müsste ich

verwenden %Vor%

Stattdessen wäre es viel einfacher, einfach einen try-catch-Block zu verwenden

%Vor%

In diesem Fall ist es mir egal, welches Objekt NULL zurückgegeben hat, es wird entweder ein Name angezeigt oder nicht. Gibt es irgendwelche Komplikationen oder ist es schlechtes Design, Try-Catch anstelle von Checks zu verwenden?

Danke für Ihre Eingabe.

    
LordAnomander 19.08.2016, 11:19
quelle

3 Antworten

7

Wenn es eine Option ist, Java 8 zu verwenden, können Sie Optional wie folgt:

%Vor%     
Hoopje 19.08.2016, 11:41
quelle
4

Diese Art der Kettenverkettung wird "Zugunglück" genannt und wird nicht bevorzugt. Eine solche Aussage verstößt auch gegen das Demeter-Gesetz . Lassen Sie mich Ihnen ein Beispiel aus dem Buch Clean code von Robert C Martin :

nennen %Vor%

Das ist ähnlich wie bei Ihnen und es ist eine schlechte Übung. Dies könnte mindestens wie folgt umgestaltet werden:

%Vor%

Dies verletzt immer noch das Demeter-Gesetz, ist aber zumindest teilweise besser. Der beste Weg wäre, herauszufinden, warum der scratchDirPath benötigt wird, und das ctxt-Objekt zu fragen, um es Ihnen zur Verfügung zu stellen. So würde es aussehen -

%Vor%

Auf diese Weise stellt ctxt nicht alle seine internen Elemente zur Verfügung. Dies entkoppelt den aufrufenden Code von der Implementierung von ctxt.

    
Kiran K 19.08.2016 11:34
quelle
0

Es ist wirklich ein Urteilsspruch, den nur Sie und Ihr Team machen können, aber es gibt (mindestens) eine objektive Sache, die ich ausrufen werde: Wenn eine dieser Methoden null zurückgibt, wird Ihr erster Codeblock ausgeführt besser als dein zweiter. Das Werfen einer Ausnahme ist relativ zu einer einfachen Verzweigung teuer. (Für den Fall, dass keine der Methoden null zurückgibt, denke ich ist die zweite möglicherweise fast unermesslich schneller als die zweite, da Sie die Verzweigung vermeiden.) Wenn Leistung von Bedeutung ist, testen Sie sie in deiner Umgebung. (Aber testen Sie es richtig ; Mikro-Benchmarks sind schwer, benutze Werkzeuge.)

Meistens spielt der Unterschied in der realen Welt natürlich keine Rolle, aber das ist der wesentliche Unterschied zur Laufzeit.

    
T.J. Crowder 19.08.2016 11:26
quelle

Tags und Links